Java LeetCode aplicación 421 más grande variedad de O exclusivo valor de dos números

array XOR 421. El valor máximo de los dos números

Dada una matriz no vacío, los elementos de la matriz A0, A1, A2, ..., an-1, donde 0 ≤ ai <231.

Encontrar el máximo O exclusivo resultados (XOR) de operación ai y aj, donde 0 ≤ i, j <n.

Puede resolver este problema en tiempo O (n)?

Ejemplo:

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

Salida: 28

Explicación: El resultado más importante es ^ 25 = 28. El 5
PS:
árbol de prefijo

class Solution {
      
    class TrieNode {

        TrieNode zero;

        TrieNode one;

        int val;

        TrieNode() {

        }
    }

    class Trie {

        TrieNode root;

        Trie() {
            root = new TrieNode();
        }

        void insert(int num) {
            TrieNode node = root;
            for (int i = 31; i >= 0; i--) {
                int bit = num & (1 << i);
                if (bit == 0) {
                    if (node.zero == null) {
                        node.zero = new TrieNode();
                    }
                    node = node.zero;
                } else {
                    if (node.one == null) {
                        node.one = new TrieNode();
                    }
                    node = node.one;
                }
            }
            node.val = num;
        }

        int find(int num) {
            TrieNode node = root;
            for (int i = 31; i >= 0; i--) {
                int bit = num & (1 << i);
                if (bit == 0) {
                    node = node.one == null ? node.zero : node.one;
                } else {
                    node = node.zero == null ? node.one : node.zero;
                }
            }
            return node.val;
        }
    }

    // 数组中两个数的最大异或值
    public int findMaximumXOR(int[] nums) {
        Trie trie = new Trie();
        for (int num : nums) {
            trie.insert(num);
        }
        int res = 0;
        for (int num : nums) {
            int other = trie.find(num);
            res = Math.max(res, num ^ other);
        }
        return res;
    }
}
Liberadas 1534 artículos originales · ganado elogios 20000 + · vistas 2,09 millones +

Supongo que te gusta

Origin blog.csdn.net/a1439775520/article/details/104879860
Recomendado
Clasificación