publicintfindMaximumXOR(int[] nums){for(int x : nums)insert(x);int maxx =0;for(int x : nums){
maxx =Math.max(maxx,query(x));}return maxx;}Trie root =newTrie();publicvoidinsert(int x){Trie cur = root;for(int i =30; i >=0; i--){int u = x >> i &1;//找打二进制的第i位上判断是0还是1if(cur.children[u]==null){
cur.children[u]=newTrie();}
cur = cur.children[u];}}publicintquery(int x){Trie cur = root;int res =0;for(int i =30; i >=0; i--){int u = x >> i &1;//找打二进制的第i位上判断是0还是1if(cur.children[u ^1]!=null){//如果当前位u的另外一个分支可以走的,那就走这个分支
res +=(1<< i);//相当于当前的值左移i位叠加到res上
cur = cur.children[u ^1];}else{//另外一个分支是空,只能和当前的分支一起前行
cur = cur.children[u];}}return res;}classTrie{Trie[] children =newTrie[2];}