当前位置: 首页 > news >正文

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

题目:

题解:

const highBit = 30type trie struct {left, right *trie
}func (t *trie) add(num int) {cur := tfor i := highBit; i >= 0; i-- {bit := num >> i & 1if 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 := tfor i := highBit; i >= 0; i-- {bit := num >> i & 1if bit == 0 {// a_i 的第 k 个二进制位为 0,应当往表示 1 的子节点 right 走if cur.right != nil {cur = cur.rightx = x*2 + 1} else {cur = cur.leftx = x * 2}} else {// a_i 的第 k 个二进制位为 1,应当往表示 0 的子节点 left 走if cur.left != nil {cur = cur.leftx = x*2 + 1} else {cur = cur.rightx = 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.mrgr.cn/news/31640.html

相关文章:

  • SQL 语法学习指南
  • 2024华为杯研赛E题保姆级教程思路分析
  • ThreadLocal引发内存泄漏的原因及解决方案
  • 【CAPL实战】system variables系统变量的基础与应用
  • 九芯电子革新健康检测!语音播报血压计ic芯片解决方案
  • python股票分析常用库,A股什么时候才能停止下跌啊
  • 14.1.2-float浮动练习
  • 如何着手创建企业数据目录?(三)权限管理及版本控制
  • Spring Boot在高校心理教育辅导系统中的应用
  • 科研绘图系列:R语言箱线图和连线图(boxplot linechart)
  • 详解ChatBI Agent架构:打造高效数据统计系统
  • mysql批量修改表前缀
  • uniapp 微信小程序 订阅消息功能实现
  • 计算机组成原理之计算机软件和硬件的关系
  • LabVIEW编程能力如何能突飞猛进
  • vue3 本地windows下的字体的引用
  • 新峰商城之购物车(三)
  • 自然语言常见面试题及答案(116~120)
  • 会声会影2025视频剪辑教学
  • Go语言的垃圾回收(GC)机制的迭代和优化历史