题目大意
https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/
整数数组,找出其中异或值最大的两个数,要求时间复杂度是O(n)
题目分析
解法参考:https://discuss.leetcode.com/topic/63213/java-o-n-solution-using-bit-manipulation-and-hashmap/17
这里依据了一个异或的性质,就是a^b=c
和a^c=b
是等价的(因此一种肯定会超时并且正确的方法是从大往小遍历int值,然后第二层循环遍历nums,看nums[i]和int异或后的结果是否在nums中)。我们需要32位逐位考虑。针对每一位,首先根据掩码mask先生成前缀的set,然后再生成到当前位的newMax值,看看set中的值跟newMax结果是否在set中,如果在说明newMax是可取的。注意代码中的mask和max都是累计的,详细可以看下代码解释。
代码
|
|
复杂度:O(n)