该题解题思路
- 异或得到 x^y
- 取 x与y中第k位为1的数
- 将数分为两个集合,第k位为1的集合和第k位不是1的集合
- 其中x y分别在这两个集合,且相同的元素是在同一个集合里面
- 于是将其转化成了求重复数字中的单个数值的问题
C++ 代码
class Solution {
public:
vector<int> findNumsAppearOnce(vector<int>& nums) {
int sum = 0;
for(auto x : nums) sum ^=x;
int k = 0;
while(!(sum>>k & 1))k++;
int first = 0;
for(auto x: nums)
if(x>>k&1)
first ^= x;
return vector<int>{first,sum^first};
}
};
if(x>>k&1)
first ^= x;
把x>>k&1 换成x>>k&1==0 为啥就不对了呢 这不是对另一个集合进行运算吗
==
优先级大于&
位运算优先级,你需要在前边加个括号原来如此!
妙啊
对于求k位为1,直接用 sum & -sum便可求得
这是错的,求的是2的k次方,而不是k
很好
厉害了!