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++;
}
}
}
总结
在处理的时候提交代码,但忘记了以下两种临界条件的场景:
- 当前数组只有一个元素时候,即可直接返回结果
- 当前数组最后一个元素是只出现一次的数,最后一个元素即可直接输出