题目来源
解题方法
哈希表
比较简单,不做阐述
位运算
关键点:将每个数的同一位进行相加,若结果能被3整除,说明此时答案数的这一位为0,因为如果没有答案数的干扰,每个数都是3个,那他们这一位的和不是0就是3的倍数,所以一定能被3整除,如果有了答案数的干扰,说明答案数这一位为1,这一位一定会比3的倍数多1
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=0;
for(int i=0;i<32;i++){
int cnt=0;
for(int num : nums){
if(num & (1 << i))
cnt++;
}
if(cnt % 3==1)
ans ^= (1 << i);
}
return ans;
}
};
收获
有了位运算这个思路,我们可以解决以下问题
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了N次。请找出那个只出现一次的数字。