LeetCode 1707. 与数组中元素的最大异或值(Trie树)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个由非负整数组成的数组 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) 01 是仅有的两个不超过 1 的整数。0 XOR 3 = 31 XOR 3 = 2 。二者中的更大值是 32) 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]提示:
1 <= nums.length, queries.length <= 10^5
queries[i].length == 2
0 <= nums[j], xi, mi <= 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-xor-with-an-element-from-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

参考文章:字符串匹配算法(Trie树)

  • 在线处理:节点中添加一个 MIN 字段,记录子树中最小的数,将数字的各个二进制位插入trie树,查找的时候走相反的位的路线(如果存在的话)
  • 离线处理:对数组、查询排序,mi 小的先查询,将数组中满足 mi 的限制的插入 trie 树,其余步骤一样
class trie{ // 在线处理
public:trie* next[2] = {NULL,NULL};int MIN = INT_MAX;void insert(int n){trie *cur = this;cur->MIN = min(cur->MIN, n);for(int i = 31; i >= 0; --i){int bit = (n>>i)&1;if(!cur->next[bit])cur->next[bit] = new trie();cur = cur->next[bit];cur->MIN = min(cur->MIN, n);}}int getMaxXOR(int n, int limit){trie *cur = this;if(cur->MIN > limit) return -1;int res = 0;for(int i = 31; i >= 0; --i){int bit = (n>>i)&1;if(cur->next[bit^1] && cur->next[bit^1]->MIN <= limit){res |= 1<<i;bit ^= 1;}cur = cur->next[bit];}return res;}
};
class Solution {
public:vector<int> maximizeXor(vector<int>& nums, vector<vector<int>>& queries) {trie *t = new trie();for(auto n : nums)t->insert(n);vector<int> ans(queries.size());for(int i = 0; i < queries.size(); ++i){int num = queries[i][0], limit = queries[i][1];ans[i] = t->getMaxXOR(num, limit);}return ans;}
};

936 ms 261 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

我的爬虫第一天

爬虫一个简单的爬虫&#xff1a;1.安装request2.测试是否安装成功3.新建项目4.使用requests请求网页4.如何用python解析网页源码5.简单的保存数据的方法一个简单的爬虫&#xff1a; 1.安装request pip install requests2.测试是否安装成功 输入python import requests不报…

qr分解求线性方程组_计算方法/数值分析第三章 线性方程组的数值解法

主要内容&#xff1a;1、引言2、高斯消去法3、直接分解法4、解线性方程组的迭代法5、向量范数、矩阵范数及迭代法的收敛性第一节 引言用克拉姆求解线性方程组第二节 高斯消去法高斯消去法是一种古老的直接法&#xff0c;其基本思想是通过消元将线性方程组的求解问题转化成三角形…

python 执行完成后,cmd窗口自动关闭

一般脚本运行完需要点击一下 在代码最后添加以下内容即可自动关闭cmd&#xff1a; import os import time time.sleep(1) # 方便展示&#xff0c;可删除 os.system("taskkill /f /im cmd.exe") # 关闭cmd窗口

txt文件可存储最大值_Verilog边码边学:十六进制文件读取$readmemh

系统任务$readmemh读取十六进制文件。$readmemh的作用是将文件中的数据一次性的读入某个数组中&#xff0c;然后可以依次从数组中取出单个的数据进行处理。读取的内容只包括空白位置(空格、换行、制表格)、注释行、十六进制的数字。语法结构中的起始地址与终止地址可省略。【语…

什么叫诚实_他爱不爱你,身体最诚实

文字&#xff1a;嘉一 声音&#xff1a;三三有位听友给我发私信说&#xff1a;“他看我的眼神变了&#xff0c;也不喜欢和我说话了&#xff0c;更懒得为我做任何事了&#xff0c;这段感情真的没意思了。”我回她&#xff1a;“一个人爱不爱你&#xff0c;身体最诚实。嘴巴可以…

【机器学习-数据科学】第一节:numpypandas

numpy&pandas安装numpy&pandasarray创建numpy的基础运算numpy的索引numpy的 array 合并numpy的 array分割numpy的 copy & deep copy安装numpy&pandas import numpy as np arraynp.array([[1,2,3],[2,3,4]])# 将数组转化为矩阵 print(array) #打印矩阵 print(nu…

【机器学习-数据科学】第二节:ipython开发环境搭建以及pandas快速入门

ipython开发环境搭建以及pandas快速入门0.开发环境搭建技巧网页版ipython&#xff1a;ipython notebooknumpy1.pandas 快速入门一导入创建对象2. pandas 快速入门二空数据处理apply的用法count和mode函数数据合并3. pandas 快速入门三数据整形数据透视时间序列数据可视化数据载…

pytorch图像和张量的相互转换_Day107:Pytorch张量类型的构建与相互转换

张量的作用Pytorch的数据类型为各式各样的Tensor&#xff0c;Tensor可以理解为高维矩阵(与Numpy中的Array类似)通过使用Type函数可以查看变量类型。一CPU张量类型Pytorch中的tensor包括七种CPU张量类型和八种GPU张量类型&#xff0c;这里我们就只讲解一下CPU中的&#xff0c;GP…

漂亮的html页面源码_爬虫数据分析之html

1、 htmlhtml 不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;是制作网页所必须的&#xff0c;你在浏览器里看到的每一个页面&#xff0c;不论简单还是复杂&#xff0c;都是用html编写的&#xff0c;包括你现在看到的这篇文章。用html写一个简单的页面&#xff0c;是…

LeetCode 1864. 构成交替字符串需要的最小交换次数

文章目录1. 题目2. 解题1. 题目 给你一个二进制字符串 s &#xff0c;现需要将其转化为一个 交替字符串 。 请你计算并返回转化所需的 最小 字符交换次数&#xff0c;如果无法完成转化&#xff0c;返回 -1 。 交替字符串 是指&#xff1a;相邻字符之间不存在相等情况的字符串…

【机器学习-数据科学】第三节:数据分析实例 分析MovieLens电影数据

数据分析实例 分析MovieLens电影数据导入数据数据合并按性别查看各个电影的平均评分活跃电影排行榜电影投票数据 grouplens.org/datasets/movielens 把文件放到这个路径下 导入数据 数据合并 按性别查看各个电影的平均评分 查看男女评分差别最大的 按照diff去排序 找出分歧…

vue路由切换组件没有加载_Vue面试题: 如何实现路由懒加载?

非懒加载import List from /components/list.vue const router new VueRouter({routes: [{ path: /list, component: List }] })方案一(常用)const List () > import(/components/list.vue) const router new VueRouter({routes: [{ path: /list, component: List }] })方…

LeetCode 1865. 找出和为指定值的下标对(哈希)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 nums1 和 nums2 &#xff0c;请你实现一个支持下述两类查询的数据结构&#xff1a; 累加 &#xff0c;将一个正整数加到 nums2 中指定下标对应元素上。计数 &#xff0c;统计满足 nums1[i] nums2[j] 等于指定值的下标对 (i,…

聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法

论文&#xff1a; Efficient Parameter-free Clustering Using First Neighbor RelationsEfficient Parameter-free Clustering Using First Neighbor Relations​arxiv.org代码&#xff1a;https://github.com/ssarfraz/FINCH-Clustering​github.com此文是CVPR2019的oral文章…

服务器不知别内存_图文版 许迎果第63期 选购和使用内存需要注意的点

其实要说清楚内存的方方面面还是要颇费一番功夫的.内存的起源和发展历程估计要讲一期,内存厂商,颗粒,品牌也需要单独讲一期,内存超频也要单独讲一期.内存看似简单,但要说的内容却是很多的.所以为了节省各位小伙伴的时间,我会尽量精简,只讲对大多数人都比较实用的部分.本期大体上…

LeetCode 1877. 数组中最大数对和的最小值(贪心)

文章目录1. 题目2. 解题1. 题目 一个数对 (a,b) 的 数对和 等于 a b 。最大数对和 是一个数对数组中最大的 数对和 。 比方说&#xff0c;如果我们有数对 (1,5) &#xff0c;(2,3) 和 (4,4)&#xff0c;最大数对和 为 max(15, 23, 44) max(6, 5, 8) 8 。 给你一个长度为 偶…

小程序多个echars_小程序界面与逻辑

主要内容数据绑定、渲染、界面层数据渲染和事件处理。一、数据绑定1.1 渲染层和逻辑层小程序宿主环境我们称微信客户端给小程序所提供的环境为宿主环境。小程序借助宿主环境提供的能力&#xff0c;可以完成许多普通网页无法完成的功能。小程序开发框架的目标是通过尽可能简单、…

LeetCode 1876. 长度为三且各字符不同的子字符串

文章目录1. 题目2. 解题1. 题目 如果一个字符串不含有任何重复字符&#xff0c;我们称这个字符串为 好 字符串。 给你一个字符串 s &#xff0c;请你返回 s 中长度为 3 的 好子字符串 的数量。 注意&#xff0c;如果相同的好子字符串出现多次&#xff0c;每一次都应该被记入…

numpy维度交换_数据分析-gt;基本操作numpy(1)

1.Numpy介绍与安装Numpy是什么&#xff1f;Numpy(Numerical Python)是目前Python数值计算中最为重要的基础包。大多数计算包都提供了基于Numpy的科学函数功能&#xff0c;将Numpy的数组对象作为数据交换的通用语。Numpy特点提供高效多维数组提供了基于数组的便捷算术操作以及广…

C#学习记录3上——类的封装,继承,多态

OOP面向对象的三大特点&#xff1a;封装&#xff08;encapsulation&#xff09;&#xff0c;继承&#xff08;inheritance&#xff09;&#xff0c;多态&#xff08;encapsulation&#xff09; 和JAVA与C一样&#xff0c;C#也是OOP语言。并且&#xff0c;C#对数据的封装要比C更…