欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

LeetCode 421 数组中两个数的最大异或值(JAVA)

程序员文章站 2022-06-17 14:42:51
class Solution { public int findMaximumXOR(int[] nums) { // 特例 int len = nums.length; if (null == nums || len == 0) return 0; int max = nums[0]; // 遍历数组,需要先进行+操作 for (int i = 1; i < len; ....

LeetCode 421 数组中两个数的最大异或值(JAVA)

class Solution {
    public int findMaximumXOR(int[] nums) {
        // 特例
        int len = nums.length;
        if (null == nums || len == 0)
            return 0;
        int max = nums[0];

        // 遍历数组,需要先进行+操作
        for (int i = 1; i < len; ++i) {
            max = Math.max(max, nums[i]);
        }
        int L = Integer.toBinaryString(max).length();

        // 检测最大异或值
        int maxXOR = 0;
        // 当前异或值
        int currentXOR;
        // 使用集合
        Set<Integer> PRE = new HashSet<>();
        // 遍历
        for (int i = L - 1; i >= 0; --i) {
            maxXOR <<= 1;
            currentXOR = maxXOR | 0x01;
            PRE.clear();
            ;
            // 将前缀加入集合中
            for (int num : nums) {
                PRE.add(num >> i);
            }
            for (int p : PRE) {
                if (PRE.contains(currentXOR ^ p)) {
                    maxXOR = currentXOR;
                    break;
                }
            }
        }
        return maxXOR;

    }
}

本文地址:https://blog.csdn.net/weixin_43170297/article/details/107302502