面试题 17.19. 消失的两个数字(位运算&异或)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 17.19. 消失的两个数字(位运算&异或)相关的知识,希望对你有一定的参考价值。
面试题 17.19. 消失的两个数字(位运算&异或)
显然最naive的算法就是哈希,扫一遍。
这里介绍异或。我们在原数组上假设 1 − N 1-N 1−N,然后异或便可以得到 x 1 ⊕ x 2 x_1\\oplus x_2 x1⊕x2。
假设 x = x 1 ⊕ x 2 x=x_1\\oplus x_2 x=x1⊕x2 的最低位 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刷题日记(2020.7.13)程序员面试经典:消失的两个数字