数组中两个数的最大异或值
力扣链接:421. 数组中两个数的最大异或值
题目描述
给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。
示例
官解思路
异或运算性质:
class Solution {
static final int HIGH_BIT = 30;
public int findMaximumXOR(int[] nums) {
int x = 0;
for(int k = HIGH_BIT; k >= 0; k--) {
Set<Integer> seen = new HashSet<Integer>();
for(int num : nums) {
seen.add(num >> k);
}
int xNext = x * 2 + 1;
boolean found = false;
for(int num : nums) {
if(seen.contains(xNext ^ (num >> k))) {
found = true;
break;
}
}
if(found) {
x = xNext;
}else {
x = xNext - 1;
}
}
return x;
}
}