您的位置:首页 > 其它

No.6 Single Number II 一组数都出现n次除了某个数,找出这个数

2015-11-01 15:19 417 查看
leetcode题目:一个数组中除了一个数字其他的都是出现3次,请找出这个数字。

实现用位处理!!
一个数字出现三次,则其对应的二进制位也出现3次;
则对于二进制位不是3的整数倍的数出现的次数不为3;
class Solution {
public:
int singleNumber(vector<int>& nums) {
int three[32]={0};
for(int i=0;i<nums.size();i++)
{
for(int b=0;b<32;b++)
{
if(nums[i] & (1<<b))
three[b]=(three[b]+1)%3;
}
}
int res=0;
for(int i=0;i<32;i++)
{if(three[i]!=0)
res |= (1<<i);}
return res;
}
};

2、极品程序员
在leetcode这道题目的讨论区看到这种用隐码解的代码,理解起来稍微复杂一些。仅供参考,贴下来提醒自己还是一只笨笨的蜗牛,个人还是习惯前面那种温柔式解法。

int singleNumber(int A[], int n)
{
int ones = 0, twos = 0, threes = 0;
for(int i = 0; i < n; i++)
{
threes = twos & A[i]; //已经出现两次并且再次出现
twos = twos | (ones & A[i]); //曾经出现两次的或者曾经出现一次但是再次出现的
ones = ones | A[i]; //出现一次的
twos = twos & ~threes; //当某一位出现三次后,我们就从出现两次中消除该位
ones = ones & ~threes; //当某一位出现三次后,我们就从出现一次中消除该位
}
return ones; //twos, threes最终都为0. ones是只出现一次的数
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: