题目:
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,100]
输出:100
题解:
题解1 哈希:
直观想法是哈希存储各数字出现次数,查找只出现一次的
int singleNumber(vector<int>& nums) {
// 法一 哈希
unordered_map<int, int> hs;
for(auto num:nums)
hs[num]++;
for(auto num:nums)
{
if(hs[num] == 1)
return num;
}
return -1;
}
题解2 位运算:
统计所有数字二进制位之和,如果某一位 %3!=0,该位为答案中的一位,将每一位进行或操作,即为答案。
int singleNumber(vector<int>& nums) {
// 法一 哈希
// 法二 统计所有数字二进制位之和,如果某一位 %3!=0,该位为答案中的一位
int ret = 0;
for(int i = 0; i < 32 ; ++i)
{
int sum = 0;
for(auto num:nums)
{
sum += (num >> i) & 1;
}
if(sum % 3 != 0)
ret |= 1 << i;
}
return ret;
}