【初级算法|数组】05-只出现一次的数

59 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

问题

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

示例:

输入: [4,1,2,1,2]
输出: 4

分析

这道题和上一道题相反。一个是找重复出现的数据,一个是找不重复的数据。但此题是要将重复的数据找出并输出。

第一种方案:使用集合 set 或者 map

使用 set 或者 map 来解决,需要先遍历一遍将数据加进集合中,如果已经存在的可以把数据删除掉,这样到最后set 或者map 中只剩下一个那么就是不重复的元素。

第二种方案:先排序后比较

如果不使用额外的空间进行解决,可以使用先进行排序,然后再两两比较,再比较的过程中,如果存在重复的数值则当前元素,和下一个元素都需要跳过。

即要考虑下2种临界的情况:

  • 当前数组只有一个元素时候,即可直接返回结果
  • 当前数组最后一个元素是只出现一次的数,最后一个元素即可直接输出

代码

function func_exerise2(nums) {
    nums = nums.sort()
    console.log(nums);
    if (nums.length == 1) return nums[0];
    for (let i = 0; i < nums.length; i++) {
        if(i=== nums.length-1) return nums[nums.length-1];
        if (nums[i] != nums[i + 1]) {
            return nums[i]
        } else {
            i++;
        }
    }
}

总结

在处理的时候提交代码,但忘记了以下两种临界条件的场景:

  • 当前数组只有一个元素时候,即可直接返回结果
  • 当前数组最后一个元素是只出现一次的数,最后一个元素即可直接输出

题目来源:leetcode-cn.com/leetbook/re…