题目

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。

思路

可以用哈希表um映射存储每一个输入的值,输入一次就给其位置数值+1,最后得到的um就是该序列中各数值总的出现次数,然后只需要遍历一遍找到出现次数为1的值并返回即可

代码

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        unordered_map<int, int> um;
        for(int num: nums){
            um[num]++;
        }
        vector<int> ans;
        for(auto& [num, count]: um){
            if(count==1){
                ans.push_back(num);
            }
        }
        return ans;
    }
};