题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
思路:
统计二进制中每一位的和,如果该位的和对3取余不为0,则表示这个只出现一次的数字该位为1
代码实现:
class Solution {
public:
int singleNumber(vector<int>& nums) {
unsigned int len = nums.size();
int *Bit_sum = new int[32];
for(int i = 0; i < 32; i++)
Bit_sum[i] = 0;
for(unsigned int i = 0; i < len; i++)
{
long long Bit_val = 1;
for(int j = 31; j >= 0; j--)
{
int bit = nums[i] & Bit_val; // 当前位为1,则该位计数加1
if(bit != 0)
Bit_sum[j]++;
Bit_val = (Bit_val * 2);
}
}
long int result = 0;
for(int i = 0; i < 32; i++)
{
result = result * 2;
result += Bit_sum[i] % 3; // 对3 取余的结果即为单个的数字该位的结果
}
delete [] Bit_sum;
return result;
}
};