Skip to content

Commit 286b1be

Browse files
committed
1707
1 parent a82a448 commit 286b1be

File tree

1 file changed

+23
-28
lines changed
  • leetcode/1707. Maximum XOR With an Element From Array

1 file changed

+23
-28
lines changed

leetcode/1707. Maximum XOR With an Element From Array/README.md

+23-28
Original file line numberDiff line numberDiff line change
@@ -51,39 +51,34 @@ struct TrieNode {
5151
int minVal = INT_MAX;
5252
};
5353
class Solution {
54+
void add(TrieNode *node, int n) {
55+
for (int i = 31; i >= 0; --i) {
56+
int b = n >> i & 1;
57+
if (node->next[b] == NULL) node->next[b] = new TrieNode();
58+
node = node->next[b];
59+
node->minVal = min(node->minVal, n);
60+
}
61+
}
62+
int maxXor(TrieNode *node, int x, int m) {
63+
int ans = 0;
64+
for (int i = 31; i >= 0; --i) {
65+
int b = x >> i & 1;
66+
if (node->next[1 - b] && node->next[1 - b]->minVal <= m) {
67+
node = node->next[1 - b];
68+
ans |= 1 << i;
69+
} else if (node->next[b] && node->next[b]->minVal <= m) node = node->next[b];
70+
else return -1;
71+
}
72+
return ans;
73+
}
5474
public:
5575
vector<int> maximizeXor(vector<int>& A, vector<vector<int>>& Q) {
5676
TrieNode root;
57-
for (int n : A) {
58-
auto node = &root;
59-
node->minVal = min(node->minVal, n);
60-
for (int i = 31; i >= 0; --i) {
61-
int b = (n >> i) & 1;
62-
if (!node->next[b]) node->next[b] = new TrieNode();
63-
node = node->next[b];
64-
node->minVal = min(node->minVal, n);
65-
}
66-
}
6777
vector<int> ans;
78+
for (int n : A) add(&root, n);
6879
for (auto &q : Q) {
69-
int x = q[0], m = q[1], val = 0;
70-
auto node = &root;
71-
if (node->minVal > m) {
72-
ans.push_back(-1);
73-
continue;
74-
}
75-
for (int i = 31; i >= 0; --i) {
76-
int b = (x >> i) & 1, r = 1 ^ b;
77-
if (node->next[r] && node->next[r]->minVal <= m) {
78-
node = node->next[r];
79-
val |= (1 << i);
80-
} else if (node->next[b]->minVal <= m) node = node->next[b];
81-
else {
82-
val = -1;
83-
break;
84-
}
85-
}
86-
ans.push_back(val);
80+
int x = q[0], m = q[1];
81+
ans.push_back(maxXor(&root, x, m));
8782
}
8883
return ans;
8984
}

0 commit comments

Comments
 (0)