Skip to content

Commit 70c3d15

Browse files
authored
Create 1707-maximum-xor-with-an-element-from-array.js
1 parent 110f7ad commit 70c3d15

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number[][]} queries
4+
* @return {number[]}
5+
*/
6+
const maximizeXor = function (nums, queries) {
7+
const n = queries.length
8+
const result = new Array(n)
9+
const trie = [null, null]
10+
for (let num of nums) {
11+
let node = trie
12+
for (let i = 30; i >= 0; i--) {
13+
const b = 1 << i
14+
if (b & num) {
15+
if (!node[1]) node[1] = [null, null]
16+
node = node[1]
17+
} else {
18+
if (!node[0]) node[0] = [null, null]
19+
node = node[0]
20+
}
21+
}
22+
}
23+
const min = Math.min(...nums)
24+
const dfs = (node, num, i, val, max) => {
25+
if (!node || val > max) return -1
26+
if (i === -1) return val
27+
const bit = 1 << i
28+
i--
29+
if (bit > max) return dfs(node[0], num, i, val, max)
30+
if (num & bit) {
31+
let x = dfs(node[0], num, i, val, max)
32+
if (x > -1) return x
33+
return dfs(node[1], num, i, val | bit, max)
34+
} else {
35+
let y = dfs(node[1], num, i, val | bit, max)
36+
if (y > -1) return y
37+
return dfs(node[0], num, i, val, max)
38+
}
39+
}
40+
41+
for (let i = 0; i < n; i++) {
42+
const [num, max] = queries[i]
43+
if (max < min) {
44+
result[i] = -1
45+
continue
46+
}
47+
result[i] = dfs(trie, num, 30, 0, max) ^ num
48+
}
49+
return result
50+
}

0 commit comments

Comments
 (0)