1 136. 只出现一次的数字
我的第一个ac,用hase表set做:时间复杂度O(n),空间复杂度O(n)。
class Solution {
public:
int singleNumber(vector<int>& nums)
{
set<int> 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<int>& nums)
{
int ans = 0;
for(auto i : nums)
ans = ans^i;
return ans;
}
};