面试题56 - II. 数组中数字出现的次数 II
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
分析
遍历每一个数的每个二进制位,统计所有数字第 i 位出现 1 的个数,如果该二进制位上 1 的个数不能被 3 整除,那么只出现一次的那个数字在这个二进制位上为1。
class Solution {
public:
int cnt[32];
int singleNumber(vector<int>& nums) {
int ans = 0;
// cnt[i][0]统计的是第i位0出现的次数
// cnt[i][1]统计的是第i位1出现的次数
for(int i=0; i<nums.size(); ++i) {
for(int j=0; j<32; ++j) {
if(nums[i] & (1<<j))
++cnt[j];
}
}
for(int i=0; i<32; ++i) {
if(cnt[i]%3) ans |= (1<<i);
}
return ans;
}
};