题解 | #字典树的实现#
两数最大异或值
http://www.nowcoder.com/practice/2db2a8c399ef415cbb8e92ba1032f131
利用Trie树,存储每一位的值进行对比
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型
*/
int son[300010][2],idx=0;
void insert(int x)
{
int p=0;
for(int i=30;i>=0;i--)
{
int u = x>>i&1;
if(son[p][u]==0)
{
son[p][u]=++idx;
}
p=son[p][u];
}
}
int query(int x)
{
int p=0,res=0;
for(int i=30;i>=0;i--)
{
int u = x>>i&1;
if(son[p][!u])
{
res+=1<<i;
p=son[p][!u];
}
else
{
p=son[p][u];
}
}
return res;
}
int maxXOR(vector<int>& array) {
// write code here
int ans=0;
for(int num:array)
{
insert(num);
}
for(int num:array)
{
ans=max(ans,query(num));
}
return ans;
}
};