题目:
Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
翻译:
给定一个整数数组,每个元素出现三次,除了一个,它只出现一次。 找到这单独的一个。
注意:
您的算法应具有线性运行时复杂性。 你能实现它,而不使用额外的内存。
思路:
设置mask用来比对每一位上的数是否出现多余1,一步步还原只有一个的那个数。
解答:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret = 0;
int mask = 1;
while (mask)
{
int countOne = 0;
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] & mask)//获得与mask相应位上的值
countOne++;
}
if (countOne % 3 == 1)
ret |= mask;
mask <<= 1;//每回合mask进位
}
return ret;
}
};