
function findMaximumXOR(nums: number[]): number {
let maxXOR = 0
let mask = 0
for(let i = 31; i >= 0; i--) {
mask |= (1 << i)
const prefixes = new Set<number>()
for(const num of nums) {
prefixes.add(num & mask)
}
const goal = maxXOR | (1 << i)
for(const prefix of prefixes) {
if(prefixes.has(prefix ^ goal)) {
maxXOR = goal
break
}
}
}
return maxXOR
};