Geek

博客园 首页 新随笔 联系 订阅 管理

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

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        unordered_map<int,int> map;
        for(const int k: data) ++map[k];
        vector<int> res;
        for(const int k: data) {
            if(map[k]==1) {
                res.push_back(k);
            }
        }
        *num1 = res[0],*num2 = res[1];
        
    }
};

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        int x =0;
        for(const int i:data) x^=i;
        x = x&(-x);
        *num1 = *num2 = 0;
        for(const int i:data) {
            if(x & i) *num1 ^= i;
            else *num2 ^= i;
        }
        
    }
};

posted on 2020-12-01 11:53  .geek  阅读(73)  评论(0编辑  收藏  举报