1. 题意
给定一个数组,其余数字都出现了三次,只有一个数出现了1次。找出这个数。
只出现一次的数字II
2. 题解
2.1 哈希表
直接用哈希表记录即可,当然不满足题意。
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int, int> freq;
for ( int num: nums)
++freq[num];
int ans = 0;
for (auto [num, occ]: freq) {
if (1 == occ ) {
ans = num;
break;
}
}
return ans;
}
};
2.3 二进制位
对于所有数某一二进制位的累加%3一定与出现一次的数位的数相等,所以直接统计即可。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for (int i = 0; i < 32; ++i) {
int total = 0;
for (int num: nums) {
if ( num & (1 << i))
++total;
}
if (total % 3)
ans |= (1 << i);
}
return ans;
}
};