查找数组中只出现一次得数字,其余数字均出现一次

根据题目要求:

  可以想到运用异或运算,任何一个数字异或它自己都等于0。

  如果我们从头到尾依次异或数组中的每一个数,那么最终的结果就是那个只出现一次的数字,因为其他出现两次的数字全部在异或中被抵消为0了(异或运算遵循交换分配率)。

举个例子:2  3  4  2  3

所有数字依次异或运算:2 xor 3 xor 4 xor 2 xor 3 = (2 xor 2) xor (3 xor 3) xor 4= 0 xor 0 xor 4 = 4

最终结果4就是我们要找的那个只出现一次的数字。

注意:如果一个数字出现大于2得奇数次,则需要考虑其他情况;

class Solution {
public:
    /**
     * 
     * @param A int整型一维数组 
     * @param n int A数组长度
     * @return int整型
     */
    int singleNumber(int* A, int n) {
        // write code here
        int result = A[0];
        for (int i = 1; i < n; i++)
        {
            result ^= A[i];
            if(result != 0)
            {
                break;
            }
        }
        return result;
    }
};

 

posted @ 2021-01-05 11:29  Werial  阅读(97)  评论(0编辑  收藏  举报