Leetcode 只出现一次的数字(c++)

版权声明:瞎几把写 https://blog.csdn.net/weixin_43184615/article/details/83275438

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

(1)首先想到用count统计,通过了,但耗时超高

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        for (int i=0;i<nums.size();++i)
        {
            if (count(nums.begin(),nums.end(),nums[i]) != 2)
                return nums[i];
        }
    }
};

(2)用异或^操作实现
两数相同为0,不同为1
一个数与自己异或会变成0
异或满足结合律 如 5^2 ^3 ^2 = 2 ^ 2 ^ 5 ^3
任何数和0异或不变

所以,将所有数字异或,如果一个数字出现两次相当于没有出现,
最后剩下的数就是只出现一次的数字

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int temp=0;
        for (int i=0;i<nums.size();++i)
        {
            temp ^= nums[i];
        }
        return temp;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43184615/article/details/83275438