原题链接:只出现一次的数字
个人解法
思路:
直接用的unordered_map,没想到空间复杂度为常数的解法
时间复杂度: O ( n ) O(n) O(n)
代码:
class Solution {
public:
unordered_map<int, int> st;
int singleNumber(vector<int>& nums) {
for(auto &num : nums) st[num] ++;
for(auto &num : nums) {
if(st[num] == 1) return num;
}
return -1;
}
};
更好的解法
思路:
异或运算,在异或运算中,两次相同的值抵消,剩下的就是出现一次的值
时间复杂度: O ( n ) O(n) O(n)
代码:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res = nums[0];
for(int i = 1;i < nums.size();i ++) res ^= nums[i];
return res;
}
};