剑指 Offer 56 - II. 数组中数字出现的次数 II
知识点:位运算
题目链接
题目描述
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7]
输出:1
限制:
- 1 <= nums.length <= 10000
- 1 <= nums[i] < 231
解题思路
- 参考前面一题 可以用位运算解决
- 其他数字出现三次,用二进制表示,并把他们都加起来,
- 如果这一位出现的次数不是三的倍数,说明那个出现一次的数在这位上有1,放入结果
代码
#include "cheader.h"
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res = 0;
for(int i = 0; i < 32; i++){
int count_num = 0;
for(int x: nums){
count_num += (x>>i)&1;
}
if(count_num%3 == 1)
res |= (1<<i);
}
return res;
}
};
今天也是爱zz的一天!