问题描述
题目要求:在线性时间内,并且不要用其余的空间。
解题思路:对每个数的每一位跟1与运算,其和模3,如果为零说明那个数字在该位为0,如果模3不为0,则说明该数在该位为1。
入的坑:算术运算符比位运算符要高级,所以如果写在一边要对位运算整体加括号。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
if(nums.size()==0 )
return 0;
int res=0;
for(int i=0;i<32;i++)
{
int ans =0;
for(int j=0;j<nums.size();j++)
{
ans += (nums[j]>>i)&1;
}
if(ans%3!=0)
res |= (1<<i);
}
return res;
}
};