LeetCode 剑指 Offer II 067. 最大的异或
题目描述
给定一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。
示例 1:
输入:nums = [3,10,5,25,2,8]
输出:28
解释:最大运算结果是 5 XOR 25 = 28
LeetCode 剑指 Offer II 067. 最大的异或
提示:
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
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;
//每句i
for(int num : nums){
if(seen.contains(xNext ^(num >> k))){
found = true;
break;
}
}
if(found){
x = xNext;
}else{
x = xNext - 1;
}
}
return x;
}
}
2.知识点
LeetCode解题报告:最大异或值的搜索
本文详细介绍了如何解决LeetCode上的剑指OfferII067问题,即找到数组中两个数的最大异或值。通过动态规划和位操作,实现了在给定数组中查找最大异或结果的算法,时间复杂度为O(n)。文章还提供了具体的Java代码实现,并对解题思路进行了分析。
767

被折叠的 条评论
为什么被折叠?



