思路
由于只能使用线性时间复杂度。所以
- 遍历数组,将每个数字出现的次数存储到字典
map
中 - 遍历字典,将次数为1的数字取出,就是答案
代码
#include<iostream>
#include<vector>
using namespace std;
#include<map>
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int size = nums.size();
if (size == 2) return nums;
// else size > 2
map<int, int> num_size;
for (size_t i = 0; i < size; ++i)
{
auto it = num_size.find(nums[i]);
if (it == num_size.end())
{
// 说明没有这个数字对应的size
// 把它加上去
num_size[nums[i]] = 1;
}
else
{
// 说明找到了
num_size[nums[i]] += 1;
}
}
vector<int> ans;
for (auto item : num_size)
{
if (item.second == 1)
{
ans.push_back(item.first);
}
}
return ans;
}
};
int main()
{
Solution s;
vector<int> nums{ 1,2,1,3,2,5 };
vector<int> ans = s.singleNumber(nums);
for (auto item : ans) {
cout << item << " ";
}
cout << endl;
return 0;
}