力扣每日一题详解.136.只出现一次的数字/基础向

52 阅读1分钟

Snipaste_2022-08-31_16-46-12.png

代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    return nums.reduce((a,b)=> a^b)
};

解析

所运用到的

1. Js中 reduce方法可以将元素累加
2. a^b为按位异或赋值,既将数转换为二进制进行一次按位异或操作并赋值。

按位异或赋值:二进制上对应位置的数相同即为0,不同即为1。

let a = 5;    // 101
a ^= 3;       // 011
                -----
return a;     // 110

题目中除了某个元素只出现一次以外,其余每个元素均出现两次,故若两数相同,则一一相消,最终得出结果。

let a = 5;    // 101
a ^= 5;       // 101
                -----
return a;     // 000

总结

经过不断累加,所有相同的数都会消除,仅剩下最后的单声狗,它是唯一的幸存者,他赢了,但又好像输了。