005.只出现一次的数字
in 算法 with 0 comment

005.只出现一次的数字

in 算法 with 0 comment

题目

leetCode_005.png

思路

这个问题跟上一题差不多,也是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]

答案

/**
 * @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];
    }
};
Comments are closed.