leetcode 1707. 与数组中元素的最大异或值

题目

给你一个由非负整数组成的数组 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 个查询的答案。

示例 1:

输入:nums = [0,1,2,3,4], queries = [[3,1],[1,3],[5,6]]
输出:[3,3,7]
解释:

  1. 0 和 1 是仅有的两个不超过 1 的整数。0 XOR 3 = 3 而 1 XOR 3 = 2 。二者中的更大值是 3 。
  2. 1 XOR 2 = 3.
  3. 5 XOR 2 = 7.
    示例 2:

输入:nums = [5,2,4,6,6,3], queries = [[12,4],[8,1],[6,3]]
输出:[15,-1,5]

解题思路

  • 将查询数组queries[i] = [xi, mi],按照m进行排序,并且记录下原来每个查询所在的位置。
  • 将nums数组也进行排序,这样的话,只需要每一个查询维护一个单调递增的指针cur即可,满足nums[cur]<=mi,而nums[0…cur]里面的元素也是小于mi的,因为排序以后的查询数组的mi是递增的,所以每遍历完一个查询queries[i] = [xi, mi],下一个遍历只需要把cur指针移动至满足num[cur]<=mi+1即可。

字典树

因为nums[j]的取值范围为0 <= nums[j], xi, mi <= 109,所以我们只需要将nums[j]的后30位取出来构造字典树即可,从根节点到叶子节点,代表从高位到低位,Trie[] children=new Trie[2]代表下一位是否可以取0或者1,例如下标0为null的话,证明下一位不能为0。所以找最大的异或结果的话,可以通过从根节点开始,尽量走一些使得当前位异或结果为1的路径,因为根节点到叶子节点是从高位到低位的,所以优先选择使得异或高位为1

代码

class Solution {public int[] maximizeXor(int[] nums, int[][] queries) {int n=queries.length;int[] res = new int[n];int[][] nq = new int[n][3];Arrays.sort(nums);for (int i = 0; i < n; i++) {nq[i][0]=queries[i][0];nq[i][1]=queries[i][1];nq[i][2]=i;}int cur=0;Trie root = new Trie();Arrays.sort(nq,(o1, o2) -> o1[1]-o2[1]);for (int i = 0; i < n; i++) {while (cur<nums.length&&nums[cur]<=nq[i][1]){root.add(nums[cur]);++cur;}res[nq[i][2]]=cur==0?-1:root.get(nq[i][0]);}return res;}
}    
public class Trie{static final int h=30;Trie[] children=new Trie[2];void add(int val){Trie node=this;for (int i=h-1;i>=0;i--){int cur=(val>>i)&1;if(node.children[cur]==null){node.children[cur]=new Trie();}node=node.children[cur];}}int get(int val){Trie node=this;int res=0;for (int i=h-1;i>=0;i--){int t=(val>>i)&1;if(node.children[t^1]!=null){res|=1<<i;t^=1;}node=node.children[t];}return res;}}

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

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

相关文章

MySQL基础入门学习【2】数据类型

数据类型&#xff1a;指列、存储过程参数、表达式和局部变量的数据特征&#xff0c;它决定了数据的存储格式&#xff0c;代表了不同的信息类型 &#xff08;1&#xff09; 整型(按存储范围分类)&#xff1a;TINYINT&#xff08;1字节&#xff09; SAMLLINT&#xff08;2字节&am…

昆西·拉森的净资产是多少?

People ask me how much I get paid all the time. It comes up on podcast interviews, Quora questions, and face-to-face discussions.人们问我&#xff0c;我一直得到多少报酬。 它来自播客访谈&#xff0c;Quora问题和面对面的讨论。 And people search this question a…

COVID-19研究助理

These days scientists, researchers, doctors, and medical professionals face challenges to develop answers to their high priority scientific questions.如今&#xff0c;科学家&#xff0c;研究人员&#xff0c;医生和医学专家面临着挑战&#xff0c;无法为其高度优先…

Node.js umei图片批量下载Node.js爬虫1.00

这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了&#xff0c;代码如下&#xff1a; // // umei图片批量下载Node.js爬虫1.00 // 2017年11月13日 //// 内置http模块 var httprequire("http");// 内置文件处理模块&#xff0c;用于创建目录和图片文件 v…

交通银行信息技术管理部副总经理张漫丽:交通银行“大数据+人工智能”应用研究...

文 | 交通银行信息技术管理部副总经理张漫丽 大数据隐含着巨大的社会、经济、科研价值&#xff0c;已引起了各行各业的高度重视。如果能通过人工智能技术有效地组织和使用大数据&#xff0c;将对社会经济和科学研究发展产生巨大的推动作用&#xff0c;同时也孕育着前所未有的机…

安软件一劳永逸_如何克服一劳永逸地公开演讲的恐惧

安软件一劳永逸If you’re like most people, the idea of public speaking terrifies you (it terrifies me too). So how do you get over those jitters, get up on stage, and give an amazing talk? First, a disclaimer: this article is purely about your stage prese…

Go语言实战 : API服务器 (8) 中间件

为什么需要中间件 我们可能需要对每个请求/返回做一些特定的操作&#xff0c;比如 记录请求的 log 信息在返回中插入一个 Header部分接口进行鉴权 这些都需要一个统一的入口。这个功能可以通过引入 middleware 中间件来解决。Go 的 net/http 设计的一大特点是特别容易构建中间…

缺失值和异常值的识别与处理_识别异常值-第一部分

缺失值和异常值的识别与处理&#x1f4c8;Python金融系列 (&#x1f4c8;Python for finance series) Warning: There is no magical formula or Holy Grail here, though a new world might open the door for you.警告 &#xff1a; 这里没有神奇的配方或圣杯&#xff0c;尽管…

SQL Server 常用分页SQL

今天无聊和朋友讨论分页&#xff0c;发现网上好多都是错的。网上经常查到的那个Top Not in 或者Max 大部分都不实用&#xff0c;很多都忽略了Order和性能问题。为此上网查了查&#xff0c;顺带把2000和2012版本的也补上了。 先说说网上常见SQL的错误或者说局限问题 12345select…

Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办?...

问题1&#xff1a;Word中摘要和正文同时分栏后&#xff0c;正文跑到下一页&#xff0c;怎么办&#xff1f;或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了&#xff0c;怎么办&#xff1f; 答&#xff1a;在word2010中&#xff0c;菜单栏中最左侧选“文件”->“选…

leetcode 664. 奇怪的打印机(dp)

题目 有台奇怪的打印机有以下两个特殊要求&#xff1a; 打印机每次只能打印由 同一个字符 组成的序列。 每次可以在任意起始和结束位置打印新字符&#xff0c;并且会覆盖掉原来已有的字符。 给你一个字符串 s &#xff0c;你的任务是计算这个打印机打印它需要的最少打印次数。…

SQL数据类型说明和MySQL语法示例

SQL数据类型 (SQL Data Types) Each column in a database table is required to have a name and a data type. 数据库表中的每一列都必须具有名称和数据类型。 An SQL developer must decide what type of data that will be stored inside each column when creating a tab…

PHP7.2 redis

为什么80%的码农都做不了架构师&#xff1f;>>> PHP7.2 的redis安装方法&#xff1a; 顺便说一下PHP7.2的安装&#xff1a; wget http://cn2.php.net/distributions/php-7.2.4.tar.gz tar -zxvf php-7.2.4.tar.gz cd php-7.2.4./configure --prefix/usr/local/php…

leetcode 1787. 使所有区间的异或结果为零

题目 给你一个整数数组 nums​​​ 和一个整数 k​​​​​ 。区间 [left, right]&#xff08;left < right&#xff09;的 异或结果 是对下标位于 left 和 right&#xff08;包括 left 和 right &#xff09;之间所有元素进行 XOR 运算的结果&#xff1a;nums[left] XOR n…

【JavaScript】网站源码防止被人另存为

1、禁示查看源代码 从"查看"菜单下的"源文件"中同样可以看到源代码&#xff0c;下面我们就来解决这个问题&#xff1a; 其实这只要使用一个含有<frame></frame>标记的网页便可以达到目的。 <frameset> <frame src"你要保密的文件…

梯度 cv2.sobel_TensorFlow 2.0中连续策略梯度的最小工作示例

梯度 cv2.sobelAt the root of all the sophisticated actor-critic algorithms that are designed and applied these days is the vanilla policy gradient algorithm, which essentially is an actor-only algorithm. Nowadays, the actor that learns the decision-making …

共享语义 unix语义_语义UI按钮

共享语义 unix语义什么是语义UI按钮&#xff1f; (What are Semantic UI Buttons?) A button indicates a possible user action. Semantic UI provides an easy-to-use syntax that simplifies not only the styling of a button, but also the natural language semantics.按…

垃圾回收算法优缺点对比

image.pngGC之前 说明&#xff1a;该文中的GC算法讲解不仅仅局限于某种具体开发语言。 mutator mutator 是 Edsger Dijkstra 、 琢磨出来的词&#xff0c;有“改变某物”的意思。说到要改变什么&#xff0c;那就是 GC 对象间的引用关系。不过光这么说可能大家还是不能理解&…

标准C程序设计七---77

Linux应用 编程深入 语言编程标准C程序设计七---经典C11程序设计 以下内容为阅读&#xff1a; 《标准C程序设计》&#xff08;第7版&#xff09; 作者&#xff1a;E. Balagurusamy&#xff08;印&#xff09;&#xff0c; 李周芳译 清华大学出版社…

leetcode 1190. 反转每对括号间的子串

题目 给出一个字符串 s&#xff08;仅含有小写英文字母和括号&#xff09;。 请你按照从括号内到外的顺序&#xff0c;逐层反转每对匹配括号中的字符串&#xff0c;并返回最终的结果。 注意&#xff0c;您的结果中 不应 包含任何括号。 示例 1&#xff1a; 输入&#xff1a…