问:
原题链接:与数组中元素的最大异或值
答:
class Solution {
public int[] maximizeXor(int[] nums, int[][] queries) {
int len = queries.length;
Arrays.sort(nums);
int[][] newQueries = new int[len][3];
for(int i = 0;i < len;i++)
{
newQueries[i][0] = queries[i][0];
newQueries[i][1] = queries[i][1];
newQueries[i][2] = i;
}
Arrays.sort(newQueries,new Comparator<int[]>(){
public int compare(int[] nums1,int[] nums2)
{
return nums1[1] - nums2[1];
}
});
int[] str = new int[len];
Trie tr = new Trie();
int index = 0;
int len2 = nums.length;
for(int[] query:newQueries)
{
int x = query[0];
int m = query[1];
int n = query[2];
while(index < len2 && nums[index] <= m)
{
tr.insert(nums[index]);
++index;
}
if(index == 0)
{
str[n] = -1;
}
else
{
str[n] = tr.gerMaxXor(x);
}
}
return str;
}
}
class Trie{
static final int L = 30;
Trie[] children = new Trie[2];
public void insert(int value)
{
Trie node = this;
for(int i = L-1;i >=0;i--)
{
int b = (value>>i) & 1;
if(node.children[b] == null)
{
node.children[b] = new Trie();
}
node = node.children[b];
}
}
public int gerMaxXor(int value)
{
int s = 0;
Trie node = this;
for(int i = L-1;i >= 0;i--)
{
int b = (value>>i) & 1;
if(node.children[b^1] != null)
{
s |= 1 << i;
b ^= 1;
}
node = node.children[b];
}
return s;
}
}