原题链接: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};
}
};
本文提供了一种解决SingleNumber III问题的有效方法。通过使用XOR操作来找到数组中只出现一次的两个数,首先找出能区分这两个数的一个位,然后基于这个位将数组分为两组并分别进行XOR操作得出答案。
2581

被折叠的 条评论
为什么被折叠?



