代码
/**
* @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
总结
经过不断累加,所有相同的数都会消除,仅剩下最后的单声狗,它是唯一的幸存者,他赢了,但又好像输了。