在给定的 N 个整数 A1,A2……AN中选出两个进行 xor(异或)运算,得到的结果最大是多少?
输入格式
第一行输入一个整数 N。
第二行输入 N 个整数 A1~AN。
输出格式
输出一个整数表示答案。
数据范围
1≤N≤10^5,
0≤Ai<2^31
输入样例:
3
1 2 3
输出样例:
3
解法1:暴力枚举O(n^2),超时
解法2:trie(字典树)
对于一个数,要求出它的异或最大值,则最优解另一个数二进制每一位都跟它相反,这样结果最大;
根据这种思路,我们可以把每个数看作32为01串,高位不足补0,将所有数的二进制下的每一位存储在字典树中,
不知道数组怎么存储字典树的看上题题解
存储后,我们再在这些数中查找异或值最大的结果;
怎样去查找异或值最大的结果:对于一个数,在字典树中从高位开始不断地沿着与该数二进制串当前位相反的路径向下访问,
如果不存在当前位相反的