题目
来自力扣
思路
用位运算(程序中的所有数在计算机内存中都是以二进制的形式储存的,位运算直接对整数在内存中的二进制位进行操作)。
1.这时传入的数组相当于一个二维数组,采用双重循环从低位开始计算每一列的和,该和对3取余就是单独数字二进制在该位的数字。
2.计算完每列之和后,要更新结果k。
代码
class Solution {
public:
int singleNumber(vector<int>& nums) {
int k = 0;
for(int i = 0;i < 32;++i)
{
int sum = 0;//二进制第i位的和
for(int j = 0;j < nums.size();++j){
sum += (nums[j] >> i) & 1;
}
k^= (sum % 3) << i;//第i位是sum%3
}
return k;
}
};
结果
注意:熟悉位运算。