【每日一题Day368】LC421数组中两个数的最大异或值 | 字典树

简介: 【每日一题Day368】LC421数组中两个数的最大异或值 | 字典树

数组中两个数的最大异或值【LC421】

Given an integer arraynums, return the maximum result ofnums[i] XOR nums[j], where 0 <= i <= j < n.

字典树
  • 思路

image.png

  • 从字典树的根节点开始遍历,并从最高位往低位查询,优先让每一位的异或结果为1,即优先匹配与之不同的二进制位【局部最优】,这样才能使最终的异或结果最大【全局最优】,
  • 实现
class Solution {
    class TrieNode{
        TrieNode[] next = new TrieNode[2];
    }
    TrieNode root = new TrieNode();
    public int findMaximumXOR(int[] nums) {
        TrieNode root;
        int res = 0;
        for (int num : nums){
            add(num);
            res = Math.max(search(num) ^ num, res);
        }
        return res;
    }
    public void add(int x){
        TrieNode p = root;
        for (int i = 31; i >= 0; i--){
            int u = (x >> i) & 1;
            if (p.next[u] == null) p.next[u] = new TrieNode();
            p = p.next[u];
        }
    } 
    public int search(int x){
        int res = 0;
        TrieNode p = root;
        for (int i = 31; i >= 0; i--){
            int u = (x >> i) & 1, v = 1 - u; 
            if (p.next[v] != null) {
                res |= (v << i);
                p = p.next[v];
            }else {
                res |= (u << i);
                p = p.next[u];
            }         
        }
        return res;
    }
} 

image.png

目录
相关文章
|
7月前
|
Java 程序员 索引
菜鸟之路Day14一一异常与File
此篇博客详细介绍了Java中的异常处理机制和File类的常用操作。
103 2
|
11月前
|
JavaScript
如何在 Vue 项目中选择合适的模块格式
【10月更文挑战第20天】选择合适的模块格式需要综合考虑多个因素,没有一种绝对正确的选择。需要根据项目的具体情况进行权衡和分析。在实际选择过程中,要保持灵活性,根据项目的发展和变化适时调整模块格式。
96 7
|
数据处理 容器
RT-Thread快速入门-线程间同步之信号量
RT-Thread快速入门-线程间同步之信号量
343 0
|
网络协议
四次挥手?为什么不是三次?服务端可以做那些优化来减少四次挥手时间?
四次挥手?为什么不是三次?服务端可以做那些优化来减少四次挥手时间?
|
算法 Serverless 计算机视觉
使用OpenCV和Python进行极线校正
使用OpenCV和Python进行极线校正
446 1
|
云安全 架构师 安全
阿里云云计算架构师ACE认证(Alibaba Cloud Certified Expert - Cloud Architect)考试大纲
介绍阿里云云计算架构师ACE认证(Alibaba Cloud Certified Expert - Cloud Architect)所需具备的知识及学习方法等。
2041 2
|
弹性计算 大数据 测试技术
阿里云服务器租用价格表,2024年月付及年付租用优惠价格表
阿里云服务器租用价格表,2024年月付及年付租用优惠价格表,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月
|
测试技术 Python
Python中Mock和Patch的区别
Python中Mock和Patch的区别
166 0
|
消息中间件 监控 NoSQL
ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash 2
ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash
438 0
|
数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(6)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(6)
155 0