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 main
import (
"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 int
nexts []*Node
}
func NewNode() *Node {
ans := &Node{}
ans.min = math.MaxInt64
ans.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.head
this.head.min = getMin(this.head.min, num)
for move := 30; move >= 0; move-- {
path := (num >> move) & 1
if 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.head
ans := 0
for move := 30; move >= 0; move-- {
path := (x >> move) & 1
// 期待遇到的东西
best := path ^ 1
if 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) << move
cur = cur.nexts[best]
}
return ans
}
执行结果如下:

2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是的更多相关文章
- PHP方便快捷的将二维数组中元素的某一列值抽离出来作为此二维数组内元素的key
得益于PHP的强大的内置数组函数array_column();array_combine(); 举个小栗子: <?php // 先查询出用户的基本信息 $userArray = [['id' = ...
- javascript中获取字符串或数组中元素的索引
有些时候,我们需要知道一个字符串中字符的位置,或者一个数组中元素的位置,这是就需要对该变量进行迭代操作. 对于数组,有两个方法indexOf和findIndex() , 需要注意的是,findInde ...
- js删除数组中元素 delete 和splice的区别
例如我有一个数组: var array = ["aa","dd","cc","aa"] ,我想删除这个数组的“dd”元素 ...
- 如何解决jersey框架中以json格式返回数组,当数组中元素一个时json格式不对
原文地址:http://www.cnblogs.com/swpk/p/3566536.html?utm_source=tuicool jersey 是oracle 出的一个较好的REST框架.使用此框 ...
- js删除数组中元素的方法
一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删 ...
- 使用Arraylist将数组中元素随机均等乱序分为N个子数组
使用Arraylist将数组中元素随机均等乱序分为N个子数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me 为了将数组中的元素 随机地 ,均等地, 不重复地 ,划分到N个子数组中 使用Arr ...
- 根据Bool值挑选数组中元素
根据Bool值挑选数组中元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用Boolean类型的数组挑选一维数组中的值 使用一维Boolean数组选取数组中的特定元素,对应位置为True ...
- JavaScript Array reverse 方法:颠倒数组中元素的顺序
在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...
- 黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:
package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[ ...
- JS中split使用方法和数组中元素的删除
JS中split使用方法和数组中元素的删除 JS中split使用方法 <script language="javascript"> function spli(){ d ...
随机推荐
- Mathematica的Combinatorica`程序包使用笔记
目录 官方给出的程序包使用指南和一些示例 引论 步骤 0x00 导入程序包 0x01 Integer Partitions 0x02 Integer Compositions 0x03 partiti ...
- 自学UI设计有哪些书籍推荐?
自学UI设计大致分为两种情况:其一.业余学习,技能拓展,不以求职为目的;其二.谋生手段,小白进阶学习或者有转行的打算.前者,无论是学习内容或者深度都可以根据自己的需求和兴趣点来做学习选择,相对来说,学 ...
- Salesforce Sharing And Visibility 零基础学习(一)基础知识篇
本篇参考: https://trailhead.salesforce.com/en/users/strailhead/trailmixes/architect-sharing-and-visibili ...
- Java面试——Linux
一.如果知道一个文件名称,怎么查这个文件在 Linux下的哪个目录,如:要查找 tnsnames.ora文件 1 find / -name tnsnames.ora 2 #还可以用locate 来查找 ...
- 命令行启动kate||cmd启动kate|| 一行命令用kate编辑文件
命令行启动kate||cmd启动kate|| 一行命令用kate编辑文件 先看: 在得知可以在命令行中输入code以启用vscode编辑器后 例 code D:\dLevel\Lenovo\Deskt ...
- 手机号码归属地 API 实现防止骚扰电话,看这一篇就够了(内附设计思路和代码)
在当今时代,骚扰电话已经成为了很多人日常生活中的一个常见问题,严重影响了人们的工作和生活. 为了避免这种情况的发生,企业和机构可以采用手机号码归属地 API,以提供更好的电话服务,减少骚扰电话的出现 ...
- flutter feature---->quick action
reference: https://www.filledstacks.com/snippet/managing-quick-actions-in-flutter/ code import 'dart ...
- 机器学习算法(八):基于BP神经网络的乳腺癌的分类预测
机器学习算法(八):基于BP神经网络的乳腺癌的分类预测 1.算法简介和应用 1.1 算法简介 BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学 ...
- $\mathcal{2023WinterHoliday}$刷题总结
\(\mathcal{2023WinterHoliday}\) \(\mathcal{CTF}\) \(\mathcal{web}\) 1.\(json格式:\)$json['x']=="w ...
- 字符串常见API(charCodeAt\fromCharCode)
1.myStr.charCodeAt(num) 返回指定位置的字符的Unicode(是字符编码的一种模式)编码. 2.String.fromCharCode() String的意思就是不能用自己定义的 ...