原题链接:SIngle Number III
题解:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
/*
这道题唯一的关键点在于:确定一个可以区分a b的元素,a^b的情况下,这里找出了最右边的1,也就是a 和 b不同的一位
采用的是 res^(~(res-1))
Time Complexity:O(N)
Space Complexity:O(1)
*/
int res=0;
for(int i=0;i<nums.size();i++)res^=nums[i];
int x=0,y=0;
int mask=res&(~(res-1));
for(int i=0;i<nums.size();i++){
if(mask&nums[i])x^=nums[i];
else y^=nums[i];
}
return vector<int>{x,y};
}
};