2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是
2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是 xi 和任何 nums 数组中不超过 mi 的元素按位异或(XOR)得到的最大值。换句话说,答案是 max(nums[j] XOR xi) ,其中所有 j 均满足 nums[j] <= mi 。如果 nums 中的所有元素都大于 mi,最终答案就是 -1 。返回一个整数数组 answer 作为查询的答案,其中 answer.length == queries.length 且 answer[i] 是第 i 个查询的答案。
福大大 答案2021-08-07:
前缀树。数组的元素的二进制,前缀树存最小值。
代码用golang编写。代码如下:
package mainimport ("fmt""math"
)func main() {nums := []int{0, 1, 2, 3, 4}queries := [][]int{{3, 1}, {1, 3}, {5, 6}}ret := maximizeXor(nums, queries)fmt.Println(ret)
}func maximizeXor(nums []int, queries [][]int) []int {N := len(nums)trie := NewNumTrie()for i := 0; i < N; i++ {trie.add(nums[i])}M := len(queries)ans := make([]int, M)for i := 0; i < M; i++ {ans[i] = trie.maxXorWithXBehindM(queries[i][0], queries[i][1])}return ans
}type Node struct {min intnexts []*Node
}func NewNode() *Node {ans := &Node{}ans.min = math.MaxInt64ans.nexts = make([]*Node, 2)return ans
}func getMin(a int, b int) int {if a < b {return a} else {return b}
}type NumTrie struct {head *Node
}func NewNumTrie() *NumTrie {ans := &NumTrie{}ans.head = NewNode()return ans
}func (this *NumTrie) add(num int) {cur := this.headthis.head.min = getMin(this.head.min, num)for move := 30; move >= 0; move-- {path := (num >> move) & 1if cur.nexts[path] == nil {cur.nexts[path] = NewNode()} else {cur.nexts[path] = cur.nexts[path]}//cur.nexts[path] = cur.nexts[path] == null ? new Node() : cur.nexts[path];cur = cur.nexts[path]cur.min = getMin(cur.min, num)}
}// 这个结构中,已经收集了一票数字
// 请返回哪个数字与X异或的结果最大,返回最大结果
// 但是,只有<=m的数字,可以被考虑
func (this *NumTrie) maxXorWithXBehindM(x int, m int) int {if this.head.min > m {return -1}// 一定存在某个数可以和x结合cur := this.headans := 0for move := 30; move >= 0; move-- {path := (x >> move) & 1// 期待遇到的东西best := path ^ 1if cur.nexts[best] == nil || cur.nexts[best].min > m {best ^= 1} else {best ^= 0}//best ^= (cur.nexts[best] == null || cur.nexts[best].min > m) ? 1 : 0;// best变成了实际遇到的ans |= (path ^ best) << movecur = cur.nexts[best]}return ans
}
执行结果如下:
左神java代码
2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是相关推荐
- leetcode 1707. 与数组中元素的最大异或值
题目 给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] . 第 i 个查询的答案是 xi 和任何 nums 数组中不超过 ...
- LeetCode 1707. 与数组中元素的最大异或值(Trie树)
文章目录 1. 题目 2. 解题 1. 题目 给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] . 第 i 个查询的答案是 ...
- python中dtype的用法_python-在NumPy数组中使用array.dtype =分配dtype值...
浮点数和整数(numpy.float64s和numpy.int64s)在内存中的表示方式有所不同.以这些不同类型存储的值42对应于存储器中的不同位模式. 当您重新分配数组的dtype属性时,您将使基础 ...
- java查询数组中元素的索引
java查询数组中元素的索引 /*** java查询数组中元素的索引*/ public class Test03 {public static void main(String[] args) {in ...
- ios 替换数组中元素_ios可变数组的所有操作
#pragma mark 创建数组c NSMutableArray * array =[[NSMutableArray alloc] initWithObjects:@"a",@& ...
- JavaScript Array reverse 方法:颠倒数组中元素的顺序
在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...
- 汇编语言LENGTHOF运算符:计算数组中元素的个数
LENGTHOF 运算符计算数组中元素的个数,元素个数是由数组标号同一行出现的数值来定义的.示例如下: .data byte1 BYTE 10,20,30 array1 WORD 30 DUP (?) ...
- 交换二维数组元素c语言,二维数组中元素替换问题!
二维数组中元素替换问题! 题目:对某个二维数组右上三角的全部元素(不包括对角线上的元素)做如下变换: (1)若该数是偶数,则找到左下三角中和它关于对角线对称的元素用这两个元素的最大公约数替换该数 (2 ...
- B09_NumPy迭代数组(控制遍历顺序,修改数组中元素的值,使用外部循环,广播迭代)
NumPy迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用arange()函数 ...
- php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...
array_slice()定义和用法 array_slice() 函数在数组中根据条件取出一段值,并返回. 注释:如果数组有字符串键,所返回的数组将保留键名.(参见例子 4) 语法 array_sli ...
最新文章
- 科大讯飞的2018:深陷同传造假及炒房风波,市值遭腰斩蒸发600亿
- 常用实验资源共享整理 20111026
- App Builder 2020中文版
- 走近北京后厂村程序员的真实生活:“拿命换钱”
- E20180715-hm
- Civil2019程序安装及注意事项
- Vim中文本全部选中
- 【Windows】修改已连接的蓝牙设备名称
- 测试手机硬件检测软件是什么,手机硬件检测工具_手机硬件检测软件_手机硬件检测软件哪个好【最新】-太平洋电脑网...
- [BBS 水木清华站]给Linux新手
- python自动战斗文字小游戏
- Google Calendar 跨平台同步方案(随时同步手机与电脑的日程安排)
- Excel插入数据透视表,实现合并同类项(office2007)
- 网络主机扫描nmap之详讲
- CP2K9.1安装-CPU版本
- ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-3-06:不同格式固件的区别:bin/hex/s37/gbl
- 将matlab的m文件转成C语言
- 天天安卓模拟器_安卓模拟器电脑版下载_天天模拟器官网
- AJPFX:外汇的爆仓和追加保证金
- fc模拟器安卓版_经典fc游戏手机版下载-经典fc游戏100合1手机版下载完整版v1.0705...
热门文章
- android 如何把图片设置成圆,Android 设置圆形图片 设置圆角图片
- Pytorch实战——知识点记录(一)
- 微信公众号python_微信公共平台框架-python(支持多账号)
- python中3个单引号,Pyhton3中单引号、双引号、三个引号的用法和区别
- 裤子尺码对照表eur40_裤子尺寸对照表,衣服尺寸对照表,服装尺寸对照表 - 尺码对照表...
- 教了一年少儿编程,说说感想和体验
- 51 单片机晶振电路原理
- 英文科技论文写作中常见的问题和技巧(自用整理)
- Ubuntu Apt 如何使用清华源
- ftp服务器限制文件大小,ftp服务器设置文件大小