【剑指Offer-56-II】数组中数字出现的次数 II
问题
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例
输入: nums = [3,4,3,3]
输出: 4
解答1:哈希表
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int, int> ump;
for (int num : nums)
ump[num]++;
for (auto [k, v] : ump)
if (v == 1) return k;
return 0;
}
};
解答2:位运算
class Solution {
public:
int singleNumber(vector<int>& nums) {
int count[32] = {0}; // 存储每位出现的次数
for (int num : nums) {
for (int i = 0; i < 32; i++) {
count[i] += num & 1;
num >>= 1;
}
}
int res = 0;
for (int i = 31; i >=0; i--) { // 每位%3后,剩下的为单独的数的二进制表示
res <<= 1;
res |= count[i] % 3;
}
return res;
}
};