algorithm/problem/leetcode/2935
2935. 找出强数对的最大异或值 II(2349)
给你一个下标从 0 开始的整数数组 nums 。如果一对整数 x 和 y 满足以下条件,则称其为 强数对 :
|x - y| <= min(x, y)
你需要从 nums 中选出两个整数,且满足:这两个整数可以形成一个强数对,并且它们的按位异或(XOR)值是在该数组所有强数对中的 最大值 。
返回数组 nums 所有可能的强数对中的 最大 异或值。
注意,你可以选择同一个整数两次来形成一个强数对。
示例 1:
1234输入:nums = [1,2,3,4,5]输出:7解释:数组 nums 中有 11 个强数对:(1, 1), (1, 2), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (3, 5), (4, 4), (4, 5) 和 (5, 5) 。这些强数对中的最大异或值是 3 XOR 4 = 7 。
示例 2:
1234输入:nums = [10,100]输出:0解释:数组 nums 中有 2 个强数对:(10, 10) 和 (100, 100) 。这些强数对中的最大异或值是 10 ...
algorithm/problem/leetcode/421
421. 数组中两个数的最大异或值
给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。
示例 1:
123输入:nums = [3,10,5,25,2,8]输出:28解释:最大运算结果是 5 XOR 25 = 28.
示例 2:
12输入:nums = [14,70,53,83,49,91,36,80,92,51,66,70]输出:127
提示:
1 <= nums.length <= 2 * 10^5
0 <= nums[i] <= 2^31 - 1
按位哈希:对于每一位,用哈希表记录之前出现的数,用哈希表判断newRes是否可能成立
如果 a⊕b=newAns,那么两边同时异或 b,由于 b⊕b=0,所以得到 a=newAns⊕b(相当于把两数之和代码中的减法改成异或)
这样就可以一边枚举 b,一边在哈希表中查找 newAns⊕b 了。
12345678910111213141516171819202122class Solution { public ...