//位运算1 2 2 4;1 2 3 4
class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
vector<int> ans(2);
//注意sum,xor1,xor2初值都是0
int i,sum=0,xor1=0,xor2=0;
//2^3=001=sum
for(i=0;i<nums.size();i++)
{
sum^=(i+1)^nums[i];
}
//t=001
int t=sum&(-sum);
for(i=0;i<nums.size();i++)
{
if(t&nums[i])
xor1^=nums[i];
else
xor2^=nums[i];
}
//尾数为1 尾数为0;每组异或
for(i=1;i<=nums.size();i++)
{
if(t&i)
xor1^=i;
else
xor2^=i;
}
for(i=0;i<nums.size();i++)
{
if(xor1==nums[i])
{
ans[0]=xor1;
ans[1]=xor2;
break;
}
}
if(i==nums.size())
{
ans[0]=xor2;
ans[1]=xor1;
}
return ans;
}
};
力扣:数组与矩阵 645. 错误的集合
最新推荐文章于 2024-08-16 22:20:39 发布