题目链接:
260. 只出现一次的数字 III - 力扣(LeetCode)
学习自评论区的这位兄弟:
代码如下:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int x = 0;
for (int num : nums)
{
x ^= num;
}
//从右往左寻找x的第一个1,用k记录该位置所对应的数
int k = 1;
while ((x & 1) == 0)
{
x >>= 1;
k <<= 1;
}
//通过这个位置上是否为1,将数组分为两组,分别异或
int a = 0, b = 0;
for (int num : nums)
{
if (num & k) a ^= num;
else b ^= num;
}
return {a, b};
}
};
很精彩的位运算用法,学习了