关于异或算法找唯一
1. 公式:
a⊕b = b⊕a (交换律)
a⊕b⊕c = a⊕(b⊕c) (结合律)
a⊕0 = a (恒等率)
a⊕a = 0
2. 应用场景:
给出一些数字,这些数字里面只有一个是不重复的, 请问怎么找到他?
其实,就是用异或的交换律和结合律, 把这些数字n1 n2 ..... nk 异或起来, 会发现 最终结果就是 nj( 那个不重复的数字)⊕ 0 。。。
/** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { let res = 0; for(let i = 0; i < nums.length; i ++){ res ^= nums [i]; } return res; };
PS: 我之前用的是暴力解法,耗时是上面的8倍