1、https://leetcode-cn.com/problems/set-mismatch/solution/cyi-huo-fa-xiang-jie-by-feng-feng-19/
边界条件的设定很难想到
t = sum & -sum
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/solution/zong-he-guan-fang-jie-shi-he-ge-wei-da-lao-jie-shi/
主站136,137,260,645,程序员面试金典17_19是类似的位运算。
其中136比较基础,260与本题相似,137比较复杂,645与程序员面试金典17_19相似。
![](https://img-blog.csdnimg.cn/20200702165251326.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjI2OTgxNw==,size_16,color_FFFFFF,t_70)
class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
int sum = 0;
int n = nums.size();
for(int i = 0; i < n; i++)
{
sum ^=(i+1)^nums[i];
}
int t = sum & (-sum);
int xor1 = 0;
int xor2 = 0;
for(int i = 1; i <= n; i++)
{
if(i&t)
{
xor1 ^=i;
}else{
xor2 ^=i;
}
}
for(int i = 0; i < n; i++)
{
if(t&nums[i])
{
xor1 ^=nums[i];
}else{
xor2 ^=nums[i];
}
}
if(count(nums.begin(),nums.end(),xor1) == 0)
{
return vector<int>{xor2,xor1};
}
return vector<int>{xor1,xor2};
}
};