We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 013e167 commit 0ace7e4Copy full SHA for 0ace7e4
solution/0600-0699/0645.Set Mismatch/README.md
@@ -43,11 +43,15 @@
43
44
异或运算求解。
45
46
-首先明确,两个相同的数异或之后的结果为 0。对该数组所有元素以及 `i∈[1, n]` 所有数字进行异或运算,结果就是**两个只出现一次的数字异或的结果**,即 `eor = a ^ b`。
+首先明确,两个相同的数异或之后的结果为 0。对该数组所有元素以及 `i∈[1, n]` 所有数字进行异或运算,这样可以消除出现两次的数字,只留下缺失的数字和重复的数字,即 `eor = a ^ b`。
47
48
-找出这个结果 eor 中最后一个二进制位为 1 而其余位为 0 的数,即 `eor & (~eor + 1)`,之后遍历数组所有元素以及 `i∈[1, n]` 所有数字,二进制位为 0 的元素异或到 a。
+使用按位与运算符 `&` 和取反运算符 `~`,从异或结果 eor 中找到最右边的`置位位`(在二进制表示中从右向左数的第一个为1的位)用来区分缺失数字和重复数字的位置,即 `eor & (~eor + 1)`
49
50
-遍历结束后 `b = eor ^ a`,返回结果即可。
+之后遍历数组所有元素以及 `i∈[1, n]` 所有数字,根据`置位位`将数字分为两组,一组是在置位位上为 0 的数字,另一组是在置位位上为 1 的数字, 二进制位为 0 的元素异或到 `a`,即缺失的数字。
51
+
52
+遍历结束后 `b = eor ^ a`,`b`即重复的数字,返回结果即可。
53
54
+时间复杂度 $O(n)$, 位运算解法空间复杂度 $O(1)$。
55
56
<!-- tabs:start -->
57
0 commit comments