260. Single Number III
一组数中有两个出现一次,其余出现两次,让返回两个出现一次的数。两两异或能把有重复的抵消,剩下的是两个出现一次的相XOR的结果。XOR结果中的1表示两个结果在该位不一样,因此把原来的数组与这位相与,也就是res两个结果分在了两组,在每组内做XOR即结果。
/*
* @lc app=leetcode id=260 lang=cpp
*
* [260] Single Number III
*/
// @lc code=start
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int res = 0;
for (const auto num : nums) {
res ^= num;
}
res &= -res;
vector<int> r(2, 0);
for (const auto num : nums) {
if ((num & res) == 0) {
r[0] ^= num;
} else {
r[1] ^= num;
}
}
return r;
}
};
// @lc code=end
Last updated
Was this helpful?