最近,我在Leetcode上遇到了this问题,并想出了一个需要澄清的解决方案:


class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int result = 0;
        for(auto & c : nums) {
            result ^= c;
        }
        return result;
    }
};

首先,为了弄清楚我应该对这个问题使用XOR操作,我应该注意什么样的关键字?

另外,为什么 vector 中的所有项目彼此进行XOR运算却得到了一个不重复的项目?

谢谢大家的答复,以下是有关其他感兴趣的人的按位属性的更多信息:More bitwise info

最佳答案

  • A ^ 0 == A
  • A ^ A == 0
  • A ^ B == B ^ A
  • (A ^ B) ^ C == A ^ (B ^ C)

  • (3)和(4)一起意味着对数字进行xor编码的顺序无关紧要。

    这意味着,例如A^B^X^C^B^A^C等于A^A ^ B^B ^ C^C ^ X

    由于(2)等于0^0^0^X

    由于(1)等于X

    我认为没有任何特定的关键字可以帮助您识别此类问题。您只应该了解XOR的上述属性。

    关于c++ - 异或操作直觉,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41963898/

    10-12 21:06