Golang | Leetcode Golang题解之第421题数组中两个数的最大异或值

news2024/9/27 9:26:47

题目:

题解:

const highBit = 30

type trie struct {
    left, right *trie
}

func (t *trie) add(num int) {
    cur := t
    for i := highBit; i >= 0; i-- {
        bit := num >> i & 1
        if bit == 0 {
            if cur.left == nil {
                cur.left = &trie{}
            }
            cur = cur.left
        } else {
            if cur.right == nil {
                cur.right = &trie{}
            }
            cur = cur.right
        }
    }
}

func (t *trie) check(num int) (x int) {
    cur := t
    for i := highBit; i >= 0; i-- {
        bit := num >> i & 1
        if bit == 0 {
            // a_i 的第 k 个二进制位为 0,应当往表示 1 的子节点 right 走
            if cur.right != nil {
                cur = cur.right
                x = x*2 + 1
            } else {
                cur = cur.left
                x = x * 2
            }
        } else {
            // a_i 的第 k 个二进制位为 1,应当往表示 0 的子节点 left 走
            if cur.left != nil {
                cur = cur.left
                x = x*2 + 1
            } else {
                cur = cur.right
                x = x * 2
            }
        }
    }
    return
}

func findMaximumXOR(nums []int) (x int) {
    root := &trie{}
    for i := 1; i < len(nums); i++ {
        // 将 nums[i-1] 放入字典树,此时 nums[0 .. i-1] 都在字典树中
        root.add(nums[i-1])
        // 将 nums[i] 看作 ai,找出最大的 x 更新答案
        x = max(x, root.check(nums[i]))
    }
    return
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 数据校验与控件绑定

在上一篇中&#xff0c;写了使用特性对一个对象的值进行校验&#xff1b;虽然代码比较简单&#xff0c;但依然不是最优解&#xff0c;在做数据新增校验的时候&#xff0c;倒也没什么问题&#xff0c;毕竟这是WinForm&#xff1b;但是如果是做数据编辑&#xff0c;代码就会变得更…

遗忘的数学(拉格朗日乘子法、牛顿法)

目录 拉格朗日乘子法定理 证明&#xff1a;​编辑 应用条件与符号选择 雅可比矩阵 黑塞矩阵 牛顿法 解方程的根的牛顿法 解方程组的根的牛顿法 数值优化的牛顿法&#xff08;求最值&#xff09; 拉格朗日乘子法定理 证明&#xff1a; dSi这一段没看懂…… 应用…

“AI+Security”系列第3期(四):360安全大模型业务实践

近日&#xff0c;由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办的“AI Security”系列第 3 期技术沙龙&#xff1a;“AI 安全智能体&#xff0c;重塑安全团队工作范式”活动顺利举行。此次活动吸引了线上线下超过千名观众参与。 活动中&…

C++——关联式容器(5):哈希表

7.哈希表 7.1 哈希表引入 哈希表的出现依旧是为了查找方便而设计的。在顺序结构中&#xff0c;查询一个值需要一一比较&#xff0c;复杂度为O(N)&#xff1b;在平衡树中&#xff0c;查询变为了二分查找&#xff0c;复杂度为O(logN)&#xff1b;而对于哈希表&#xff0c;我们可…

BST-二叉搜索树

前言 从图的角度出发&#xff0c;树是一种特殊的图。图的大多数算法&#xff0c;树都可以适用。对树操作中&#xff0c;你可以发现有关图算法思想的体现。 不过&#xff0c; 本篇不是完全从图的角度解读树&#xff0c; 重点在初学者视角&#xff08;一般学习数据结构顺序是从树…

码点和码元的区别--Unicode标准的【码点】和【码元】

Unicode是通用字符编码标准是计算机科学领域里的一项业界标准&#xff0c;包括字符集、编码方案等。 Unicode标准定义了一个统一的多语言文本字符集&#xff08;即Unicode字符集&#xff09;。 Unicode标准定义了三种字符编码方案&#xff1a;UTF-8、UTF-16、UTF-32。 因此&…

【Java面向对象高级06】static的应用知识:代码块

文章目录 前言一、代码块概述二、代码块分2种 1、静态代码块2、实例代码块总结 前言 记录static的应用知识&#xff1a;代码块 一、代码块概述 代码块是类的5大成分之一&#xff08;成员变量&#xff0c;构造器&#xff0c;方法&#xff0c;代码块&#xff0c;内部类&#xf…

「Python教程」vscode的安装和python插件下载

粗浅之言&#xff0c;如有错误&#xff0c;欢迎指正 文章目录 前言Python安装VSCode介绍VSCode下载安装安装python插件 前言 Python目前的主流编辑器有多个&#xff0c;例如 Sublime Text、VSCode、Pycharm、IDLE(安装python时自带的) 等。个人认为 vscode 虽然在大型项目上有…

一个好用的MP3音乐下载网,我推荐给你(免费)

点击访问->https://www.gequbao.com/ 或用Bing搜索歌曲宝即可。 主页面长这样子~ 以最近大火的悲鸣海为例&#xff0c;搜索&#xff1b; 以第一个为例&#xff0c;点击&#xff1b; 它既支持下载.mp3格式的音乐文件&#xff0c;还支持下载.lrc的歌词文件。 非常好用&…

使用ChatGPT引导批判性思维,提升论文的逻辑与说服力的全过程

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 批判性分析&#xff08;Critical Analysis&#xff09; 是论文写作中提升质量和说服力的重要工具。它不仅帮助作者深入理解和评价已有研究&#xff0c;还能指导作者在构建自己论点时更加…

网络工程师学习笔记——网络互连与互联网(三)

TCP三次握手 建立TCP连接是通过三次握手实现的&#xff0c;采用三报文握手主要是为了防止已失效的连接请求报文突然又传送到了&#xff0c;因而产生错误 主动发起TCP连接建立的称为客户端 被动等待的为TCP服务器&#xff0c;二者之间需要交换三个TCP报文段 首先是客户端主动…

jQuery——对象的使用

1、理解&#xff1a;即执行 jQuery 核心函数返回的对象 2、jQuery 对象内部包含的是 dom 元素对象的伪数组&#xff08;可能只有一个元素&#xff09; 3、jQuery 对象是一个包含所有匹配的任意多个 dom 元素的伪数组对象 4、基本行为&#xff1a; ① size&#xff08;&#xf…

Java_Se 数组与数据的存储

数组是相同类型数据的有序集合。其中&#xff0c;每一个数据称作一个元素&#xff0c;每个元素可以通过一个索引&#xff08;下标&#xff09;来访问它们。 数组的四个基本特点&#xff1a; 1.长度是确定的。数组一旦被创建&#xff0c;它的大小就是不可以改变的。 2.其元素…

【Java 问题】基础——面相对象

面向对象 15. 面向对象和面向过程的区别&#xff1f;16. 面向对象的基本特征17.重载&#xff08;overload&#xff09;和重写&#xff08;override&#xff09;的区别&#xff1f;18.访问修饰符public、private、protected、以及不写&#xff08;默认&#xff09;时的区别&…

2024低代码大赛火热进行,豪礼抢先看~

2024 网易低代码大赛正火热进行中&#xff0c;其中“网易云信低代码”专区吸引了众多开发者参与。 通过低代码高效、灵活的应用构建方式&#xff0c;结合云信的即时通讯和音视频能力&#xff0c;开发者既可以大幅缩短开发周期&#xff0c;还能提升应用的互动性和用户体验。 为…

AGV小车全双工通信应用-低延迟、8路并发全双工通信

随着智能制造和物流行业的不断发展&#xff0c;AGV小车&#xff08;自动导引车&#xff09;在工厂、仓库、物流中心的应用日益广泛。AGV小车凭借其自动化、高效、灵活的特点&#xff0c;逐渐成为物料搬运中的关键设备。在这种复杂多变的环境中&#xff0c;数据传输的可靠性、实…

支持云边协同的「物联网平台+边缘计算底座」

2024年9月20日&#xff0c;工信部发布《工业重点行业领域设备更新和技术改造指南》&#xff0c;旨在指导工业领域设备更新和技术改造工作。该指南设定目标&#xff0c;到2027年完成约200万套工业软件和80万台工业操作系统的更新换代任务。此外&#xff0c;计划实现80%规模以上制…

Python3自带HTTP服务:轻松开启与后台管理

Python3自带有http服务&#xff0c;可以在服务器&#xff0c;也可以在本地启动&#xff0c;并运行一些常用的网页程序。比如&#xff1a;我们可以把streamlit框架编写的网页放到服务器上&#xff0c;开启http服务&#xff0c;就可以通过网页来调用这个pythont程序了&#xff0c…

14、线程池ForkJoinPool实战及其工作原理分析

1. 由一道算法题引发的思考 算法题&#xff1a;如何充分利用多核CPU的性能&#xff0c;快速对一个2千万大小的数组进行排序&#xff1f; 1&#xff09;首先这是一道排序的算法题&#xff0c;而且是需要使用高效的排序算法对2千万大小的数组进行排序&#xff0c;可以考虑使用快…

重头开始嵌入式第四十二天(硬件 ARM体系架构)

目录 一&#xff0c;ARM是什么&#xff1f; 1.公司名称 ARM的主流架构&#xff1a; 2.处理器架构 二&#xff0c;什么是处理器架构&#xff1f;什么是处理器&#xff1f; 一、处理器 二、处理器架构 三&#xff0c;一个计算机由什么构成呢&#xff1f; 一、硬件系统 二…