LeetCode 421 数组中两个数的最大异或值(JAVA)
程序员文章站
2022-06-17 14:42:51
class Solution { public int findMaximumXOR(int[] nums) { // 特例 int len = nums.length; if (null == nums || len == 0) return 0; int max = nums[0]; // 遍历数组,需要先进行+操作 for (int i = 1; i < len; ....
class Solution {
public int findMaximumXOR(int[] nums) {
// 特例
int len = nums.length;
if (null == nums || len == 0)
return 0;
int max = nums[0];
// 遍历数组,需要先进行+操作
for (int i = 1; i < len; ++i) {
max = Math.max(max, nums[i]);
}
int L = Integer.toBinaryString(max).length();
// 检测最大异或值
int maxXOR = 0;
// 当前异或值
int currentXOR;
// 使用集合
Set<Integer> PRE = new HashSet<>();
// 遍历
for (int i = L - 1; i >= 0; --i) {
maxXOR <<= 1;
currentXOR = maxXOR | 0x01;
PRE.clear();
;
// 将前缀加入集合中
for (int num : nums) {
PRE.add(num >> i);
}
for (int p : PRE) {
if (PRE.contains(currentXOR ^ p)) {
maxXOR = currentXOR;
break;
}
}
}
return maxXOR;
}
}
本文地址:https://blog.csdn.net/weixin_43170297/article/details/107302502