我最近在 Leetcode 上遇到了 这个 问题,并想出了一个我需要澄清的解决方案:
给定一个整数数组,每个元素都出现两次,除了一个。找到那个单一的。
注意:您的算法应该具有线性运行时复杂度。你能在不使用额外内存的情况下实现它吗?
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result = 0;
for(auto & c : nums) {
result ^= c;
}
return result;
}
};
首先,我应该注意什么样的关键字才能确定我应该对这个问题使用 XOR 操作?
另外,为什么对向量中的所有项目进行异或运算会给我们一个不重复的项目?
谢谢大家的这些回复,这里有一些关于按位属性的更多信息,供其他感兴趣的人使用: 更多按位信息
原文由 User 5842 发布,翻译遵循 CC BY-SA 4.0 许可协议
A ^ 0 == A
A ^ A == 0
A ^ B == B ^ A
(A ^ B) ^ C == A ^ (B ^ C)
(3) 和 (4) 一起表示数字
xor
ed 的顺序无关紧要。这意味着,例如,
A^B^X^C^B^A^C
等于A^A ^ B^B ^ C^C ^ X
。因为 (2) 等于
0^0^0^X
。因为 (1) 等于
X
。我认为没有任何特定的关键字可以帮助您识别此类问题。您只需要知道 XOR 的上述属性。