Skip to content

Commit 8caa8cb

Browse files
authored
Update 1707-maximum-xor-with-an-element-from-array.js
1 parent d74f875 commit 8caa8cb

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

1707-maximum-xor-with-an-element-from-array.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,50 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number[][]} queries
4+
* @return {number[]}
5+
*/
6+
const maximizeXor = function(nums, queries) {
7+
nums.sort((a, b) => a - b)
8+
queries.forEach((e, i) => e.push(i))
9+
queries.sort((a, b) => a[1] - b[1])
10+
const n = nums.length
11+
let idx = 0
12+
const res = []
13+
const root = [null, null]
14+
for(const [x, m, qi] of queries) {
15+
while(idx < n && nums[idx] <= m) {
16+
let cur = root, val = nums[idx]
17+
for(let i = 29; i >= 0; i--) {
18+
const tmp = (val >> i) & 1
19+
if(cur[tmp] == null) cur[tmp] = [null, null]
20+
cur = cur[tmp]
21+
}
22+
idx++
23+
}
24+
if(idx === 0) {
25+
res[qi] = -1
26+
continue
27+
}
28+
29+
let tmp = 0, cur = root
30+
for(let i = 29; i >= 0; i--) {
31+
const val = 1 - ((x >> i) & 1)
32+
if(cur[val] != null) {
33+
tmp = tmp * 2 + 1
34+
cur = cur[val]
35+
} else {
36+
tmp = tmp * 2
37+
cur = cur[1 - val]
38+
}
39+
}
40+
res[qi] = tmp
41+
}
42+
43+
return res
44+
};
45+
46+
// another
47+
148
/**
249
* @param {number[]} nums
350
* @param {number[][]} queries

0 commit comments

Comments
 (0)