class Solution {
public:
int singleNumber(vector<int>& nums) {
int one = 0, two = 0;
for (int i = 0; i < nums.size(); ++i) {
int v = nums[i];
int three = v & two;
v ^= three;
two ^= three;
two |= one & v;
one ^= v;
}
return one;
}
};