题目描述
在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。
请找出那个只出现一次的数字。
你可以假设满足条件的数字一定存在。
思考题:
如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?
样例
输入:[1,1,1,2,2,2,3,4,4,4]
输出:3
算法1
(暴力枚举) $O(n^2)$
C++ 代码
class Solution {
public:
int findNumberAppearingOnce(vector<int>& nums) {
int n = nums.size();
int x = 0;
for(int i = 31; i >= 0; --i){
int tmp = 0;
for(int j = 0; j < n; ++j){
tmp += nums[j] >> i & 1;
}
x = x * 2 + tmp % 3;
}
return x;
}
};