★136. 只出现一次的数字(位运算)

136. 只出现一次的数字

这个题主要考察的知识点是位运算(这里是异或)
如果不要求空间复杂度为O(1),那有很多方法。但是这里有这样的要求。
可以通过位运算 的方法来实现。

异或运算 ⊕有以下三个性质:

  1. 任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。

  2. 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。

  3. 异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。

  4. 和0异或为自身。
    在这里插入图片描述

  5. 和自己异或是0
    在这里插入图片描述

  6. 满足交换律,结合律
    在这里插入图片描述

考虑这道题

所以这个题,一共2n+1个数,有n个数出现了2次,还有1个数出现了一次。所以将这2n+1个数全部异或⊕,最后的结果就是只出现了一次的那个数。

class Solution {
    
    
    public int singleNumber(int[] nums) {
    
    
        int res = 0;
        for(int num:nums){
    
    
            res ^= num;
        }
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45895217/article/details/134781715