《python算法与数据结构2000讲》0421. 数组中两个数的最大异或值
- 标签:位运算、字典树、数组、哈希表
- 难度:中等
题目大意
给定一个整数数组 nums
。
要求:返回 num[i] XOR nums[j]
的最大运算结果。其中 0 ≤ i ≤ j < n
。
解题思路
最直接的想法暴力求解。两层循环计算两两之间的异或结果,记录并更新最大异或结果。
更好的做法可以减少一重循环。首先,要取得异或结果的最大值,那么从二进制的高位到低位,尽可能的让每一位异或结果都为 1
。
将数组中所有数字的二进制形式从高位到低位依次存入字典树中。然后是利用异或运算交换律:如果 a ^ b = max
成立,那么 a ^ max = b
与 b ^ max = a
均成立。这样当我们知道 a
和 max
时,可以通过交换律求出 b
。a
是我们遍历的每一个数,max
是我们想要尝试的最大值,从 11111