@@ -61,7 +61,6 @@ class Solution {
61
61
int eor = 0 ;
62
62
for (int i = 1 ; i <= nums. length; ++ i) {
63
63
eor ^ = (i ^ nums[i - 1 ]);
64
- <<<<<< < Updated upstream
65
64
}
66
65
int diff = eor & (~ eor + 1 );
67
66
int a = 0 ;
@@ -134,27 +133,14 @@ public:
134
133
if ((nums[ i - 1] & diff) == 0) {
135
134
a ^= nums[ i - 1] ;
136
135
}
137
- =======
138
- }
139
- int diff = eor & (~eor + 1 );
140
- int a = 0 ;
141
- for (int i = 1 ; i <= nums.length; ++i) {
142
- if ((nums[i - 1] & diff) == 0) {
143
- a ^= nums[i - 1];
144
- }
145
- >>>>>>> Stashed changes
146
136
if ((i & diff) == 0) {
147
137
a ^= i;
148
138
}
149
139
}
150
140
int b = eor ^ a;
151
141
for (int num : nums) {
152
142
if (a == num) {
153
- <<<<<<< Updated upstream
154
143
return {a, b};
155
- =======
156
- return new int[]{a, b};
157
- >>>>>>> Stashed changes
158
144
}
159
145
}
160
146
return {b, a};
@@ -164,6 +150,8 @@ public:
164
150
165
151
### **Go**
166
152
153
+ 把每个数都放到它应该在的位置,最后出现"异常"的就是重复的数和丢失的数。
154
+
167
155
```go
168
156
func findErrorNums(nums []int) []int {
169
157
n := len(nums)
@@ -181,6 +169,34 @@ func findErrorNums(nums []int) []int {
181
169
}
182
170
```
183
171
172
+ 也可以使用位运算。
173
+
174
+ ``` go
175
+ func findErrorNums (nums []int ) []int {
176
+ eor , n := 0 , len (nums)
177
+ for i := 1 ; i <= n; i++ {
178
+ eor ^= (i ^ nums[i-1 ])
179
+ }
180
+ diff := eor & (-eor)
181
+ a := 0
182
+ for i := 1 ; i <= n; i++ {
183
+ if (nums[i-1 ] & diff) == 0 {
184
+ a ^= nums[i-1 ]
185
+ }
186
+ if (i & diff) == 0 {
187
+ a ^= i
188
+ }
189
+ }
190
+ b := eor ^ a
191
+ for _ , num := range nums {
192
+ if a == num {
193
+ return []int {a, b}
194
+ }
195
+ }
196
+ return []int {b, a}
197
+ }
198
+ ```
199
+
184
200
### ** C++**
185
201
186
202
``` cpp
0 commit comments