005.只出现一次的数字

题目

思路

这个问题跟上一题差不多,也是sort()排序并且检查相邻2个数是否相等(区别在于上一题的步长为1,这题的步长为2)。

举例,有一个数组为[4,1,2,2,1],经过排序后[1,1,2,2,4]。

检查nums[

有人会问为什么步长是2而不是其他任何数呢?

因为题目中提到了只有一个数出现了一次,其他任何数字都出现了2次。当确认其他任何数字的重复次数之后则步长就为对应出现的次数。

if(nums[i] != nums[i+1]) return nums[i]; 为什么返回是nums[i]而不是nums[i+1]?

因为排序之后重复出现的数字都是相邻的,而我们只出现一次的数字一定会出现在奇数位,所以返回的是nums[i]

答案

1
2
3
4
5
6
7
8
9
10
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
nums.sort();
for(var i = 0;i < nums.length;i=i+2){
if(nums[i] != nums[i+1]) return nums[i];
}
};

评论区