LC 137
在整数数组nums中,找出其中只出现一次的数字,其余数字均出现三次!
样例:
输入 [1,2,3,3,3,1,1]
返回 2
解决方法:
在数组中找出只出现一次的数字,其余数字均出现两次,可直接使用异或$^$进行操作,有
0 ^ x = x
x ^ x = 0
对于本题中数字出现三次,考虑设计一种状态转换电路,使得一个数字出现3次后自动抵消为0。
可以取两个数字进行按位操作,两个变量取相同的位进行操作,完成从 00 -> 01 -> 10 -> 00 的操作,使数字出现三次时置为零。
int singleNumber(vector<int>& nums) {
int a = 0, b = 0;
for (auto x : nums) {
b = (b ^ x) & ~a;
a = (a ^ x) & ~b;
}
return b;
}