剑指offer--数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路1:暴力解法,每次到一个位置使用循环遍历其后面是否出现过即可,如果没有则存起来,如果找到了那么标记一下后面那个以免重复寻找

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        if(data.size()==0)
            return;
        vector<bool>visited(data.size(),false);
        vector<int>res;
        for(int i = 0;i<data.size();++i){
            bool flag = true;
            if(visited[i]==false){
                for(int j = i+1;j<data.size();++j){
                    if(data[i]==data[j]){
                        flag = false;
                        visited[j]=true;
                        break;
                    }
                }
                if(true==flag)
                res.push_back(data[i]);
            }
        }
        *num1 = res[0];
        *num2 = res[1];
    }
};

 方法2:使用hash结构,空间换时间

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        if(data.size()==0)
            return;
        unordered_map<int,int> arr_hash;
        for(int i = 0;i<data.size();++i){
            if(arr_hash.find(data[i])==arr_hash.end())
                arr_hash[data[i]] = 1;
            else
                arr_hash[data[i]]++;
        }
        auto iter = arr_hash.begin();
        vector<int> res;
        while(iter!=arr_hash.end()){
            if(iter->second==1)
                res.push_back(iter->first);
            iter++;
        }
        *num1 = res[0];
        *num2 = res[1];
    }
};
发布了107 篇原创文章 · 获赞 125 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/Li_haiyu/article/details/100657353