初级算法-数组章节-只出现一次的数字

271 阅读1分钟

初级算法(第五题)

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

解题思路

既然要在一个数组里面找出不重复的那个,只出现一次代表,那用异或是最简单解决的,
异或有以下特点
1^1=0;
1^0=1;
0^1=1;
0^0=0;
就是将数字转换为二进制进行比较
0000 ==0
||||
0010 ==2
||||
0010 ==2

0010 ==2
||||
0010 ==2
||||
0010 ==2

所以我们只需设定一个初始值然后以此比较赋值返回最后一次的值就好了

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    const length = nums.length;
    let ans = 0;
    for(let i = 0; i < length; i++){
        ans ^= nums[i];
    }
    return ans
};