1 题目
Given a non-empty 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?
Example 1:
Input: [2,2,3,2]
Output: 3
Example 2:
Input: [0,1,0,1,0,1,99]
Output: 99
2 尝试解
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i = 0; i < nums.size();i++){
if((i > 0 && nums[i-1] == nums[i])||(i < nums.size()-1 && nums[i]==nums[i+1]))
continue;
else
return nums[i];
}
return 0;
}
};
3 标准解
class Solution {
public:
int singleNumber(vector<int>& nums) {
int x1 = 0, x2 = 0, mask = 0;
for (int i : nums) {
x2 ^= x1 & i;
x1 ^= i;
mask = ~(x1 & x2);
x2 &= mask;
x1 &= mask;
}
return x1;
}
};