1、题目描述
在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。
请找出那个只出现一次的数字。
你可以假设满足条件的数字一定存在。
思考题:
- 如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?
样例
输入:[1,1,1,2,2,2,3,4,4,4]
输出:3
2、问题描述:
3、问题关键:
- 可以通过位运算的方式,用二进制的方式表示,将每一位相加求和再对3取模,就可以得到结果。
4、C++代码:
class Solution {
public:
int findNumberAppearingOnce(vector<int>& nums) {
int n = nums.size();
int bit[32] = {0};
for (int i = 0; i < 32; i ++)
for (int j = 0; j < n; j ++)
bit[i] += (nums[j] >> i) & 0x01;
int res = 0;
for (int i = 0; i < 32; i ++)
res += (bit[i] % 3) << i;
return res;
}
};
网友评论