消失的两个数字 --- 位运算
目录
一:题目
二:算法原理
三:代码实现
一:题目
题目链接:面试题 17.19. 消失的两个数字 - 力扣(LeetCode)
二:算法原理
只出现一次的数字III:常见位运算总结-CSDN博客
丢失的数字:丢失的数字 --- 位运算-CSDN博客
三:代码实现
class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int sum = 0;int len = nums.size()+2;//将所有的数异或在一起for(int i = 1; i <= len;i++)sum ^= i;for(auto& e : nums)sum ^= e;//取出比特位为1的那一位,将两个不同的元素划分为两部分int n = (sum &(-sum));//分别求出两部分缺失的元素int sum1 = 0,sum2 = 0;for(int i = 1; i<= len;i++){if(i & n)sum1 ^= i;elsesum2 ^= i;}for(auto e : nums){if(e &n)sum1 ^= e;else sum2 ^= e;}return {sum1,sum2};}
};