您的位置:首页 > Web前端

【剑指Offer】II. 数组中数字出现的次数 II

2020-06-01 04:49 141 查看

题目

在一个数组 

nums
 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

思路

看一下题解,都上自动机了,就nm离谱。

采用这个思路,虽然效率略低,但好理解。

直接将代码修改成除了一个数字以外,其余数字都出现 k 次 的通用问题的解决方案

题解见:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/solution/mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4/

代码

[code]class Solution {
public:
int singleNumber(vector<int>& nums) {
int k = 3;//除了一个数字以外,其余数字都出现 k 次 的通用问题的解决方案
int bits[32] = {0};//int有32位。这个数组用来存二进制中各位1的数量之和

for(int i = 0;i < nums.size();i++){
for(int j = 0;j < 32;j++){
bits[31-j] += (nums[i] & 1);
nums[i] >>= 1;//右移一次
}
}

int a = 0;

//二进制数组每位取余k,然后转化成整数
for(int j = 0;j < 32;j++){
a <<= 1;
a |= bits[j] % k;
}

return a;
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: