Acwing.143 最大异或对(trie树)

题目

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

输入格式

第一行输入一个整数N。

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

输出格式

输出一个整数表示答案。

数据范围

1 ≤N ≤105,0≤A<231

  • 输入样例:
java 复制代码
3
1 2 3
  • 输出样例
java 复制代码
3

题解

java 复制代码
import java.util.Scanner;

/**
 * @author akuya
 * @create 2023-07-24-0:00
 */
public class Mxor {
    static int N=100010;
    static int M=31*N;

    static int n;
    static int a[]=new int[N];
    static int son[][]=new int[M][2];
    static int idx;

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        int res=0;
        for(int i=0;i<n;i++){
            a[i]=scanner.nextInt();
        }


        for(int i=0;i<n;i++){
            insert(a[i]);
            int t=query(a[i]);
            res=Math.max(res,a[i]^t);
        }

        System.out.println(res);
    }

    public static void insert(int x){

        int p=0;
        for(int i=30;i>=0;i--){
            int u=x>>i&1;
            if(son[p][u]==0) son[p][u]=++idx;
            p=son[p][u];
        }

    }

    public static int query(int x){
        int p=0;
        int res=0;
        for(int i=30;i>=0;i--){
            int u=x>>i&1;
            if(son[p][u^1]!=0){
                p=son[p][1^u];
                res=res*2+1^u;
            }else{
                p=son[p][u];
                res=res*2+u;
            }
        }


        return res;
    }
}

思路

正常遍历时间复杂度为n2,利用trie树存起来,然后分解成二进制遍历。可以压缩时间复杂度到O(n)*O(31)。这样就不会超时了

相关推荐
浪客川几秒前
使用 IDEA 生成API文档
java·ide·intellij-idea
文心快码BaiduComate10 分钟前
光本位联合文心快码打造面向光电芯片研发的全栈AI Agent Lightmate
算法
一次旅行27 分钟前
ViT/CLIP/LLaVA/GPT-4V/VideoLLM多模态架构全解:原理仿真+工业落地选型+完整推理代码
人工智能·算法·架构
上下求索,莫负韶华38 分钟前
笔记-数据库事务和java事务和切面
java·数据库·笔记
@小匠1 小时前
Spring Boot Nacos绑定 Map 时中文 key 导致启动失败:一次从复现到源码的排查实录
java·开发语言·前端
Knight_AL1 小时前
Lombok @Builder 踩坑:build() 前后对象类型不一样
android·java·开发语言
神明不懂浪漫1 小时前
【第五章】队列
开发语言·数据结构·经验分享·笔记·算法
happy_baymax1 小时前
MATLAB MCP Server+ MATLAB Agentic Toolkit+Simulink Agentic Toolkit自动更新批处理文件.ps1
人工智能·算法
SamChan901 小时前
PDF翻译中的并发控制:用Semaphore防止API限流与资源耗尽
java·jvm·pdf
大黄说说1 小时前
Java 与 Kotlin 混合开发避坑指南:老项目平滑迁移 Kotlin 实操手册
java·开发语言·kotlin