给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。
找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, j < n 。
你能在O(n)的时间解决这个问题吗?
示例:
输入: [3, 10, 5, 25, 2, 8]
输出: 28
解释: 最大的结果是 5 ^ 25 = 28.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int findMaximumXOR(vector<int>& nums)
{
int res = 0;
int mask = 0;
for(int i = 31; i >= 0; i--)
{
// 设置掩码为了取出高几位
mask = mask | ( 1 << i);
set<int> myset;
for(auto& num : nums)
myset.insert(num & mask);
// 先贪心的认为这一位是1
int temp = res | (1 << i);
for(auto it = myset.begin(); it != myset.end(); it++)
{
if(myset.find(temp ^ (*it)) != myset.end())
{
res = temp;
break;
}
}
}
return res;
}
};