421. Maximum XOR of Two Numbers in an Array
class Solution {
public:
int findMaximumXOR(vector<int>& nums) {
int max = 0, mask = 0;
for (int i = 31; i >= 0; --i) {
mask |= (1 << i);
unordered_set<int> si;
for (int num : nums)
si.insert(mask & num);
int temp = max | (1 << i);
for (int prefix : si)
if (si.find(temp ^ prefix) != si.end()) {
max = temp;
break;
}
}
return max;
}
};
贪心,从最高位开始。
每次迭代,max代表最高位上会产生的最大值。temp是当前这一位上可能的最大值。
如果要取到temp,必须要set中两个值A,B,使得A^B=temp.
注意A^B=C->
A=C^B,
所以只要看A*temp在不在set中就行了。
这一题还是没有完全理解。