美文网首页
Trie Tree(二):Maximum XOR of Two

Trie Tree(二):Maximum XOR of Two

作者: ibyr | 来源:发表于2017-03-28 22:43 被阅读170次

[Leetcode-421] Maximum XOR of Two Number in an Array?

Given a non-empty array of numbers, a0, a1, a2, ..., an-1, where 0 <= ai <= 2^31.

Find the maximum result of ai XOR aj, where 0 <=i, j < n.
Do it in O(n) runtime.

Input: [3, 10, 5, 25, 2, 8]

Output: 28

Explanation: The maximum result is 5 ^ 25 = 28.

一个数组中取 两个数异或 的最大值。

解析

遍历数组,对每个数的二进制构建一棵字典树。

再次遍历数组,对每个数的每个二进制位与1异或:数组元素的二进制位为0,则寻找到值为1的子树,数组元素的二进制位为1,则寻找到值为0的子树。(当然也可以与0异或)

与1异或后子树不为空,则可计数并累加;与1异或后子树为空,则继续向下查找。

划重点!!!

  1. 对数组元素的二进制构建Trie树
  2. 寻找子树的时候,与1(或0)异或
public class Solution {
    public int findMaximumXOR(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        TrieNode root = new TrieNode();
        // To build Trie Tree.
        for (int num : nums) {
            TrieNode node = root;
            for (int i = 31; i >= 0; i--) {
                int curbit = (num >>> i) & 1;
                if (node.children[curbit] == null) {
                    node.children[curbit] = new TrieNode();
                }
                node = node.children[curbit];
            }
        }

        int max = Integer.MIN_VALUE;

        // To find maximum XOR value.
        for (int num : nums) {
            TrieNode node = root;  // All num start from root node to find。
            int curMax = 0;
            for (int i = 31; i >= 0; i--) {
                int curbit = (num >>> i) & 1;
                if (node.children[curbit ^ 1] != null) {
                    curMax += (1 << i);
                    node = node.children[curbit ^ 1];
                } else {
                    node = node.children[curbit];
                }
            }
            max = curMax > max ? curMax : max;
        }
        return max;
    }

    /**
     * 构建 TrieNode。
     */
    class TrieNode {
        TrieNode[] children;

        public TrieNode() {
            children = new TrieNode();
        }
    }
}

[完]

相关文章

网友评论

      本文标题:Trie Tree(二):Maximum XOR of Two

      本文链接:https://www.haomeiwen.com/subject/mlvsottx.html