【Leetcode】421. Maximum XOR of Two Numbers in an Array

题目地址:

https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/

给定一个非负整数数组 A A A,返回其中两个两个数异或的最大可能值。

思路是用Trie。参考https://blog.csdn.net/qq_46105170/article/details/109763193。代码如下:

public class Solution {
    
    
    
    class Node {
    
    
        Node next[];
    
        public Node() {
    
    
            next = new Node[2];
        }
    }
    
    Node root;
    
    private void insert(int x) {
    
    
        Node cur = root;
        // 题目里x非负,所以用31位整数即可
        for (int i = 31; i >= 0; i--) {
    
    
            int idx = x >> i & 1;
            if (cur.next[idx] == null) {
    
    
                cur.next[idx] = new Node();
            }
            
            cur = cur.next[idx];
        }
    }
    
    private int query(int x) {
    
    
        int res = 0;
        Node cur = root;
        for (int i = 31; i >= 0; i--) {
    
    
            int idx = x >> i & 1;
            res <<= 1;
            if (cur.next[idx ^ 1] != null) {
    
    
                cur = cur.next[idx ^ 1];
                res++;
            } else {
    
    
                cur = cur.next[idx];
            }
        }
        
        return res;
    }
    
    public int findMaximumXOR(int[] nums) {
    
    
        root = new Node();
        int res = 0;
        for (int num : nums) {
    
    
            insert(num);
            res = Math.max(res, query(num));
        }
        
        return res;
    }
}

时空复杂度 O ( n ) O(n) O(n)

猜你喜欢

转载自blog.csdn.net/qq_46105170/article/details/114056769