https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/
思路:01字典树模板题……贪心就比较好想了,根据二进制的性质,显然要从高位枚举。
class Tire{
public:
Tire()
{
root.resize(2,nullptr);
}
void insert(int num)
{
int val=1<<30;
Tire *cur=this;
while(val)
{
int idx=min(1,num&val);
if(cur->root[idx]==nullptr)
cur->root[idx]=new Tire();
cur=cur->root[idx];
val>>=1;
}
}
int query(int num)
{
int val=1<<30,ans=0;
Tire *cur=this;
while(val)
{
int idx=min(1,num&val);
if(cur->root[1-idx])
{
ans|=val;
cur=cur->root[1-idx];
}
else
cur=cur->root[idx];
val>>=1;
}
return ans;
}
private:
vector<Tire*> root;
};
class Solution {
public:
int findMaximumXOR(vector<int>& nums) {
Tire root;
int ans=0;
for(const int& ele:nums)
{
root.insert(ele);
ans=max(ans,root.query(ele));
}
return ans;
}
};