位运算问题

Jiacheng 2021-05-02 AM

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;
}

标签: 位运算

非特殊说明,本博所有文章均为博主原创。

评论啦~