其他分享
首页 > 其他分享> > *剑指offer 040、数组中只出现一次的两个数字

*剑指offer 040、数组中只出现一次的两个数字

作者:互联网

剑指offer 040、数组中只出现一次的两个数字

题目

image-20210921205806917

题解

哇这道题根本没有想起来会用 异或 来解决的

力扣的官方解析

思路

image-20210922165044799

image-20210922165920544

算法

class Solution {
public:
    vector<int> FindNumsAppearOnce(vector<int>& array) {
        vector<int> result;
        int res1 = 0, res2 = 0;
        int orSum = 0;
        for (auto x : array) {
            orSum ^= x;
        }
        
        int t = 1;    // 找出异或 结果中哪一位是1
        while ((orSum & t) == 0) {
            t = t << 1;
        }
        for (auto x : array) {
            if (t & x) {
                res1 ^= x;
            }
            else {
                res2 ^= x;
            }
        }
        result.push_back(min(res1, res2));
        result.push_back(max(res1, res2));
        return result;
    }
};

标签:数字,offer,res2,res1,int,异或,result,数组,040
来源: https://blog.csdn.net/qq_45893475/article/details/120420762