★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异或为自身。
    ★136. 只出现一次的数字(位运算)_第1张图片

  5. 和自己异或是0
    ★136. 只出现一次的数字(位运算)_第2张图片

  6. 满足交换律,结合律
    ★136. 只出现一次的数字(位运算)_第3张图片

考虑这道题

所以这个题,一共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;
    }
}

你可能感兴趣的:(力扣Hot100,java,leetcode)