题目
![]()
思路
这个问题跟上一题差不多,也是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
|
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]; } };
|