2
Node[] links = new Node[2];6
boolean containsKey(int ind) {7
return links[ind] != null;14
void put(int ind, Node node) {20
private static Node root;26
public static void insert(int num) {28
for (int i = 31; i >= 0; i--) {29
int bit = (num >> i) & 1;30
if (!node.containsKey(bit)) {31
node.put(bit, new Node());37
public static int getMax(int num) {41
for (int i = 31; i >= 0; i--) {42
int bit = (num >> i) & 1;43
if (node.containsKey(1 - bit)) {44
maxNum = maxNum | (1 << i);45
node = node.get(1 - bit);55
public int findMaximumXOR(int[] nums) {56
Trie trie = new Trie();58
for (int i = 0; i < nums.length; i++) {63
for (int i = 0; i < nums.length; i++) {64
maxi = Math.max(maxi, trie.getMax(nums[i]));