给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。
找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, j < n 。
你能在O(n)的时间解决这个问题吗?
示例:
输入: [3, 10, 5, 25, 2, 8]
输出: 28
解释: 最大的结果是 5 ^ 25 = 28.
思路:官方题解,解释的贼清晰。
class Solution {
public int findMaximumXOR(int[] nums) {
int res=0;
int mask=0;
for(int i=31;i>=0;i--) {
mask=mask|(1<<i);
Set<Integer> set=new HashSet<>();
for(int num : nums) {
set.add(num&mask);
}
int tmp=res|(1<<i);
for(Integer prefix : set) {
if(set.contains(prefix^tmp)) {
res=tmp;
break;
}
}
}
return res;
}
}