方法一:
使用位运算的方法,耗时20ms.
class Solution {
public:
int singleNumber(vector<int>& nums) {
int flag = 1;
int curr = 0;
int count = 0;
vector<int> v;
while(flag)//这样做为了避免出现负数
{
count = 0;
for(int i = 0;i<nums.size();i++)
{
if(flag & nums[i])
count++;
}
v.push_back(count%3);
flag = flag << 1;
}
curr = 0;
for(int i = v.size()-1;i>=0;i--)
{
curr = curr << 1;
curr += v[i];
}
return curr;
}
};
方法二:位运算的另一种实现。耗时24ms.
class Solution {
public:
int singleNumber(vector<int>& nums) {
int flag = 0;
int curr = 0;
int count = 0;
while(flag<32)//这样做为了避免出现负数
{
count = 0;
for(int i = 0;i<nums.size();i++)
{
if((nums[i] >> flag)&1)
count++;
}
curr |= (count%3)<<flag;
flag++;
}
return curr;
}
};