博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maximum XOR of Two Numbers in an Array
阅读量:6256 次
发布时间:2019-06-22

本文共 2111 字,大约阅读时间需要 7 分钟。

标题文字

链接:

可以用trie tree来做。把所有num放进tree,之后对每一个num从最高位找是否存在和当前bit不同的path。把build tree单独写一个函数,结果TLE了,所以放一起了。。

public class Solution {    public int findMaximumXOR(int[] nums) {        /* trie tree: root is the largest bit         * 32 bits         */        TrieNode root = new TrieNode();        for(int num : nums) {            TrieNode node = root;            for(int i = 31; i >= 0; i--) {                int bit = (num >> i) & 1;                if(node.children[bit] == null) node.children[bit] = new TrieNode();                node = node.children[bit];            }        }                int globalMax = Integer.MIN_VALUE;                for(int num : nums) {            int local = 0;            TrieNode node = root;            for(int i = 31; i >= 0; i--) {                int bit = (num >> i) & 1;                if(node.children[bit ^ 1] != null) {                    local += (1 << i);                    node = node.children[bit ^ 1];                }                else node = node.children[bit];            }            globalMax = Math.max(globalMax, local);        }        return globalMax;    }        class TrieNode {        TrieNode[] children = new TrieNode[2];    }    }

看到discussion还有一种简单的方法,从最高位开始扫,每次在nums里面找有没有两个数XOR可以等于1。如果有就把1放进去,当前结果累计到下一个循环。用一个set存到第i位位置的数,然后通过XOR就能找到有没有可以匹配的数。

  1. 把所有num(31, i)放进set里面

  2. 找出set中是否有两个数XOR后等于i = 1的结果

  3. 有就更新globalMax

第二步根据 x ^ y = z, then x ^ z = y

public class Solution {    public int findMaximumXOR(int[] nums) {         int globalMax = 0, highestBits = 0;         for(int i = 31; i >= 0; i--) {             // 1000 -> 1100 -> 1110 -> 1111             highestBits = highestBits | (1 << i);             Set
set = new HashSet(); for(int num : nums) { set.add(num & highestBits); } // find if current bit can be 1 int addOne = globalMax | (1 << i); for(int num : set) { if(set.contains(num ^ addOne)) { globalMax = addOne; break; } } } return globalMax; }}

转载地址:http://jhnsa.baihongyu.com/

你可能感兴趣的文章
QT学习-10/31/2012
查看>>
jQuery File Upload
查看>>
bbb板运行rtems-编写led底层驱动
查看>>
如何从零安装Mysql
查看>>
Appium简介及工作原理
查看>>
IP 类型转换
查看>>
mysql实践1
查看>>
struts2 Preparable接口
查看>>
hdu4578(线段树)
查看>>
写一个脚本简单检测局域网存活的机器
查看>>
Dubbo
查看>>
angular与jquery 进行json提交数据,报文头格式不一致的解决方案
查看>>
更换笔记本内存:自己动手修电脑(一)
查看>>
POJ2262-Goldbach's Conjecture
查看>>
区分扫描枪输入和键盘输入的实现
查看>>
【ssh服务配置】
查看>>
【mongdb主从复制和同步】
查看>>
下载文件downloadFile
查看>>
课后作业-阅读任务-阅读笔记-3
查看>>
hdoj1078(介绍记忆化搜索及其模板)
查看>>