题目描述
统计各个数字的二进制的各个位1的出现次数,如果一个位出现三次的整数倍次(出现3,6,9....次),就是出现三次的数的一部分,否则是要求的数的一部分,再把它们移位,加起来还原成答案。
int是补码形式的,如果输入负数,同样成立。
样例
blablabla
算法1
时间复杂度
O(n)
C++ 代码
class Solution {
public:
int findNumberAppearingOnce(vector<int>& nums) {
int bit[32] = {0};
for (int i = 0; i < nums.size(); i++) {
for (int j = 0; j < 32; j++) {
if (nums[i] >> j & 1) {
bit[j]++;
}
}
}
int ans = 0;
for (int j = 0; j < 32; j++) {
if (bit[j] % 3 != 0) {
ans += 1 << j;
}
}
return ans;
}
};