本文主要是介绍【每日一题】421. 数组中两个数的最大异或值-2023.11.4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
421. 数组中两个数的最大异或值
给你一个整数数组 nums
,返回 nums[i] XOR nums[j]
的最大运算结果,其中 0 ≤ i ≤ j < n
。
示例 1:
输入:nums = [3,10,5,25,2,8] 输出:28 解释:最大运算结果是 5 XOR 25 = 28.
示例 2:
输入:nums = [14,70,53,83,49,91,36,80,92,51,66,70] 输出:127
提示:
1 <= nums.length <= 2 * 105
0 <= nums[i] <= 231 - 1
解答:
代码:
class Solution {public int findMaximumXOR(int[] nums) {int max=0;for(int x:nums){max=Math.max(max,x);}int hightBit=31-Integer.numberOfLeadingZeros(max);int ans=0,mask=0;Set<Integer> seen=new HashSet<>();for(int i=hightBit;i>=0;i--){//从最高位开始枚举seen.clear();mask |=1<<i;int newAns=ans|(1<<i);//这个比特位可以是1吗for(int x:nums){x&=mask;//低于i的比特位置为0if(seen.contains(newAns^x)){ans=newAns;//这个比特位可以是1break;}seen.add(x);}}return ans;}
}
结果:
这篇关于【每日一题】421. 数组中两个数的最大异或值-2023.11.4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!