AcWing 74. 数组中唯一只出现一次的数字(详细图解+c++代码)
原题链接
困难
作者:
GinSoda
,
2021-04-08 21:49:34
,
所有人可见
,
阅读 681
/*
acwing 74等价于leetcode 137
思路1:
枚举每一位
二进制第i位,模三余1则ans该位为1,模三余0则ans该位为0
思路2:有限状态机
*/
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0, cnt;
for (int i = 0; i < 32; i ++) {
cnt = 0; // 该位是1的出现次数
for (auto x:nums)
if (x >> i & 1) cnt ++;
if (cnt % 3) ans |= 1 << i;
}
return ans;
}
};
class Solution {
public:
int singleNumber(vector<int>& nums) {
int a = 0, b = 0;
for (auto x:nums) {
a = ~b & x^a; // 低位
b = ~a & x^b; // 高位
}
return a;
}
};