-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path645.cpp
More file actions
29 lines (29 loc) · 776 Bytes
/
645.cpp
File metadata and controls
29 lines (29 loc) · 776 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public:
vector<int> findErrorNums(vector<int>& nums) {
int size = nums.size();
int Xor = 0, xor0 = 0, xor1 = 0;
for (int n: nums)
Xor ^= n;
for (int i = 1; i <= size; i++)
Xor ^= i;
int rightmostbit = Xor & ~(Xor - 1);
for (int n: nums) {
if ((n & rightmostbit) != 0)
xor1 ^= n;
else
xor0 ^= n;
}
for (int i = 1; i <= size; i++) {
if ((i & rightmostbit) != 0)
xor1 ^= i;
else
xor0 ^= i;
}
for (int i = 0; i < size; i++) {
if (nums[i] == xor0)
return {xor0, xor1};
}
return {xor1, xor0};
}
};