question:
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
方法参考他人博客,注释自己标的.
int singleNumber(vector<int>& nums)
{
int bitnum[32] = {0};
int res = 0;
for (int i = 0; i != 32; i++)
{
for (int j = 0; j != nums.size(); j++)
{
bitnum[i] += (nums[j] >> i) & 1; //统计32位中每一位1出现的次数
}
res += (bitnum[i] % 3) << i; // 由于其他数字的某位(1或者0)都是X3重复出现,所以%3余下的数字,肯定是"出现一次的数字"的第i位的数字,再通过移位换成十进制
}
return res;
}