面试题 17.19. 消失的两个数字(位运算&异或)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 17.19. 消失的两个数字(位运算&异或)相关的知识,希望对你有一定的参考价值。

面试题 17.19. 消失的两个数字(位运算&异或)

显然最naive的算法就是哈希,扫一遍。

这里介绍异或。我们在原数组上假设 1 − N 1-N 1N,然后异或便可以得到 x 1 ⊕ x 2 x_1\\oplus x_2 x1x2

假设 x = x 1 ⊕ x 2 x=x_1\\oplus x_2 x=x1x2 的最低位 1 1 1为第 k k k位。那么按照第 k k k位将整个数组分为两类,再分别异或就可以得到 x 1 x_1 x1 x 2 x_2 x2

Code by hash

class Solution 
public:
    vector<int> missingTwo(vector<int>& a) 
        int n = a.size();
        unordered_map<int,int>mp;
        for(int &x:a) mp[x]++;
        vector<int>ans;
        for(int i=1;i<=n+2;i++)
            if(!mp.count(i))
                ans.push_back(i);
                if(ans.size()==2) return ans;
            
        return ans;
    
;

异或的code 就不写了qwq

以上是关于面试题 17.19. 消失的两个数字(位运算&异或)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 面试题 17.19. 消失的两个数字

面试题 16.01. 交换数字-----位运算

Leetcode刷题日记(2020.7.13)程序员面试经典:消失的两个数字

力扣leetcode 面试题消失的数字题解

LeetCode 面试题 17.19 消失的两个数字[排序] HERODING的LeetCode之路

LeetCode 面试题 17.19 消失的两个数字[排序] HERODING的LeetCode之路