HOT100打卡—day8—【技巧】—最新8.20(还有4题)

1 136. 只出现一次的数字

136. 只出现一次的数字

我的第一个ac,用hase表set做:时间复杂度O(n),空间复杂度O(n)。

class Solution {
public:
    int singleNumber(vector& nums) 
    {
        set st;
        for(auto i:nums)
        {
            if(st.end() == st.find(i))
                st.insert(i);
            else 
                st.erase(i);
        }
        return *st.begin();
    }
};

要求:时间复杂度O(n),空间复杂度O(1)。看了题解,可以排序,但也时间复杂度过高,正解应该是异或运算:a是一个int数,a ^ a = 0, a ^ 0  = a

AC代码:

class Solution {
public:
    int singleNumber(vector& nums) 
    {
        int ans = 0;
        for(auto i : nums)
            ans = ans^i;
        return ans;
    }
};

你可能感兴趣的:(HOT100打卡,算法)