关于异或算法找唯一

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

 

  

posted @ 2023-07-28 13:44  心中的阿哲  阅读(22)  评论(0编辑  收藏  举报