Skip to content

Commit 2d6102a

Browse files
committed
Runtime: 396 ms (Top 62.05%) | Memory: 87.3 MB (Top 27.92%)
1 parent c3340ac commit 2d6102a

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,64 @@
1+
// Runtime: 396 ms (Top 62.05%) | Memory: 87.3 MB (Top 27.92%)
12
class Solution {
23
public:
34
int findMaximumXOR(vector<int>& nums) {
45
int max_length = floor(log2(max(*max_element(nums.begin(), nums.end()), 1))) + 1;
56
int ans_int = 0;
67
string ans_string('0', max_length);
78
TreeNode *root = new TreeNode(-1);
8-
9+
910
for (auto &num : nums) {
1011
TreeNode *curr_node = root;
1112
TreeNode *comp_node = root;
1213
string curr_num_to_bit = numToBit(num, max_length);
1314
int update = 0;
1415
char curr_bit = '0';
15-
16+
1617
for (int curr = 0; curr < max_length; curr++) {
17-
18-
if (curr_num_to_bit[curr] == '0') {
18+
19+
if (curr_num_to_bit[curr] == '0') {
1920
if (curr_node -> left == nullptr) curr_node -> left = new TreeNode(0);
2021
curr_node = curr_node -> left;
21-
22+
2223
curr_bit = (comp_node -> right != nullptr) ? '1' : '0';
2324
comp_node = (comp_node -> right != nullptr) ? comp_node -> right : comp_node -> left;
2425
}
2526
else {
2627
if (curr_node -> right == nullptr) curr_node -> right = new TreeNode(1);
2728
curr_node = curr_node -> right;
28-
29+
2930
curr_bit = (comp_node -> left != nullptr) ? '1' : '0';
30-
comp_node = (comp_node -> left != nullptr) ? comp_node -> left : comp_node -> right;
31+
comp_node = (comp_node -> left != nullptr) ? comp_node -> left : comp_node -> right;
3132
}
32-
33+
3334
if (update == 0 && ans_string[curr] - '0' < curr_bit - '0') update = 1;
3435
else if (update == 0 && ans_string[curr] - '0' > curr_bit - '0') update = -1;
35-
36+
3637
ans_string[curr] = (update == 1) ? curr_bit : ans_string[curr];
3738
}
3839
}
3940

4041
for (int curr = 0; curr < max_length; curr++) {
4142
ans_int += ((ans_string[curr] - '0') << (max_length - curr - 1));
4243
}
43-
44+
4445
return ans_int;
4546
}
46-
47+
4748
string numToBit (int num, int length) {
4849
string num_to_bit = "";
49-
50+
5051
while (num > 0) {
5152
num_to_bit.push_back((char)(num % 2 + '0'));
5253
num /= 2;
5354
}
54-
55+
5556
while (num_to_bit.size() < length) {
5657
num_to_bit.push_back('0');
5758
}
58-
59+
5960
reverse(num_to_bit.begin(), num_to_bit.end());
60-
61+
6162
return num_to_bit;
6263
}
63-
};
64+
};

0 commit comments

Comments
 (0)