题目大意:线性时间+不使用额外空间,找到数组中只出现过一次的数字,其他数组都出现过三次
分析:位运算
代码:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int seenOnce = 0,seenTwice = 0;
for(int i = 0;i < nums.size();i++){
//通过以下操作,可以做到:
//第一次遇到2,添加到seenOnce
//第二次遇到2,添加到seenTwice,seenOnce中去掉2
//第三次遇到2,seenTwice中去掉2
seenOnce = ~seenTwice & (seenOnce ^ nums[i]);
seenTwice = ~seenOnce & (seenTwice ^ nums[i]);
}
return seenOnce; //出现一次和出现三次的区别就在于seenOnce中是否保留
}
};