Acwing143最大异或对

题目

在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?

输入格式

第一行输入一个整数 N

第二行输入 N 个整数 A1~AN

输出格式

输出一个整数表示答案。

数据范围

1≤N≤10^5,
0≤Ai<2^31

输入样例:
3
1 2 3
输出样例:
3

代码

import java.util.Scanner;

public class Main {
   
    static int idx, N = 3100010;
    static int[][] t = new int[N][2];  // 字典树数组,每个节点有两个子节点
    public static void main(String[] args) {
   
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();  // 输入数组的长度
        int[] a = new int[n + 1];
        for (int i = 0; i < n; i++) {
   
            a[i] = in.nextInt();  // 读取数组元素
            insert(a[i]);  // 将数组元素插入字典树中
        }
        int res = 0;
        for (int i = 0; i < n; i++) {
   
            res = Math.max(res, query(a[i]));  // 查询数组元素的最大异或值
        }
        System.out.println(res);
    }

    // 查询给定数字 k 的最大异或值
    private static int query(int k) {
   
        int p = 0, res = 0;
        for (int i = 30; i >= 0; i--) {
   
            int u = k >> i & 1;  // 获取数字 k 的第 i 位二进制数
            if (t[p][1 - u] != 0) {
     // 如果当前节点存在与 u 相反的子节点
                res += (1 << i);  // 更新结果
                p = t[p][1 - u];  // 移动到下一个节点
            } else {
   
                p = t[p][u];  // 否则移动到同一位的子节点
            }
        }
        return res;
    }

    // 将数字 k 插入字典树中
    private static void insert(int k) {
   
        int p = 0;
        for (int i = 30; i >= 0; i--) {
   
            int u = k >> i & 1;  // 获取数字 k 的第 i 位二进制数
            if (t[p][u] == 0) t[p][u] = ++idx;  // 如果当前节点不存在与 k 的第 i 位相同的子节点,则创建一个新的子节点
            p = t[p][u];  // 移动到下一个节点
        }
    }
}

相关推荐

  1. Acwing143

    2024-02-09 10:56:01       49 阅读
  2. 26、

    2024-02-09 10:56:01       36 阅读
  3. 算法刷题笔记 (详细注释的C++实现)

    2024-02-09 10:56:01       26 阅读
  4. 面试算法67:

    2024-02-09 10:56:01       53 阅读
  5. 阿里云数据ACAACP复习题(121~140)

    2024-02-09 10:56:01       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-09 10:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-09 10:56:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-09 10:56:01       82 阅读
  4. Python语言-面向对象

    2024-02-09 10:56:01       91 阅读

热门阅读

  1. Vivado用ILA抓波形保存为CSV文件

    2024-02-09 10:56:01       48 阅读
  2. c#通过ExpressionTree 表达式树实现对象关系映射

    2024-02-09 10:56:01       41 阅读
  3. 38. C++ 引用的本质

    2024-02-09 10:56:01       47 阅读
  4. 序列化和反序列化、pytest-DDT数据驱动

    2024-02-09 10:56:01       50 阅读
  5. 2024.2.6

    2024-02-09 10:56:01       48 阅读
  6. 面试复盘——10

    2024-02-09 10:56:01       53 阅读
  7. Git入门

    Git入门

    2024-02-09 10:56:01      54 阅读