Single Number
题目
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
解决
1. 通过记录出现次数判断
class Solution {
public:
int singleNumber(vector<int>& nums) {
int num = nums.size();
unordered_map<int, int> array;
for (int i = 0; i < num; i++) {
// 先将所有数字出现次数初始化为0
array[nums[i]] = 0;
}
for (int i = 0; i < num; i++) {
// 统计数字的出现次数
array[nums[i]]++;
}
for (int i = 0; i < num; i++) {
if (array[nums[i]] == 1) {
return nums[i];
}
}
}
};
2. 异或
异或的运算规律是相同为0,不同为1
,这样两个相同的数异或得到的结果就是0。
所以我们将数组array
中的数全部异或,最后得到的结果一定是出现了一次的数。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result = nums[0];
int num = nums.size();
for (int i = 1; i < num; i++) {
result = result ^ nums[i];
}
return result;
}
};