题目
tire里面已经插入值之后,t[root][c]、t[root][c^1]至少一个一定为1.
class Solution {
#define Maxbit 31
public:
int t[2000005][2],sz=0;
void _insert(int x){
int root=0,c;
for(int i=Maxbit;i>=0;--i){
c=((x>>i)&1);
if(!t[root][c]) t[root][c]=++sz;
root=t[root][c];
}
}
int solve(int x){
int root=0,res=0,c;
for(int i=Maxbit;i>=0;--i){
c=((x>>i)&1);
if(t[root][c^1]) res=(res<<1|1),root=t[root][c^1];
else res=(res<<1),root=t[root][c];
}
return res;
}
int findMaximumXOR(vector<int>& nums) {
memset(t,0,sizeof t),sz=0;
int n=nums.size(),ans=0;;
if(!n) return 0;
_insert(nums[0]);
for(int i=1;i<n;++i) ans=max(ans,solve(nums[i])),_insert(nums[i]);
return ans;
}
};