//然后再对每个数的异或值进行比较;
class Solution {
public:
struct Node
{
int son[2];
};
vector<Node>nodes;
int findMaximumXOR(vector<int>& nums) {
nodes.push_back({0,0});
for(auto x:nums)
{
int p=0;
for(int i=30;i>=0;i--)
{
int t=x>>i&1;
if(!nodes[p].son[t])//判断当前儿子存储的下一个节点是否存在
{
nodes.push_back({0,0});
nodes[p].son[t]=nodes.size()-1; //存储的是下一节点下标
}
p= nodes[p].son[t];
}
}
int res=0;
for(auto x:nums)
{
int p=0,max_xor=0;
for(int i=30;i>=0;i--)
{
int t=x>>i&1;
if(nodes[p].son[!t])//看当前节点的另一个儿子存不存在,存在就添加到答案
{
p=nodes[p].son[!t];
max_xor+=1<<i;
}
else
{
p=nodes[p].son[t];
}
}
res=max(res,max_xor);
}
return res;
}
};