摘要:给定数组nums[n]和两个整数low与high,问有多少对(i,j)满足 0<=i<j<n,并且low <= (nums[i] ^ nums[j]) <= high。 1<=n<=2E4; 1<=nums[i]<=2E4; 1<=low<=high<=2E4 分析: 1、把区分问题拆分为两部分,记
阅读全文
摘要:给定一棵n个节点的有根树,节点i的父节点为parents[i],根节点的父节点为-1,节点的基因值等于自身编号。有m个询问,queries[i]=[node[i],val[i]],返回从根节点到node[i]的路径上所有节点基因值与val[i]的异或最大值。 2<=n<=1E5; 1<=m<=3E4
阅读全文
摘要:给定数组nums[n],如果一对整数x和y满足|x-y|<=min(x,y),则称其为强数对。需要从nums[n]中选出一个强数对,并且异或结果最大。 1<=n<=5E4; 1<=nums[i]<2^20 分析:trie+双指针。不妨设x<=y,对|x-y|<=min(x,y)变形得:x<=y<=2
阅读全文
摘要:给定数组nums[n]和查询数组queries[m],其中queries[i]=[xi,mi],第i个查询表示nums[n]中不超过mi的所有元素与xi异或的最大值。 1<=n,m<=1E5; 0<=nums[i],xi,mi<=1E9 分析:01trie+离线。将询问按mi从小到大排序,将nums
阅读全文
摘要:给定数组nums[n],求nums[i]^nums[j]的最大值,其中0<=i<=j<n。 1<=n<=2E5; 0<=nums[i]<2^31 分析:01trie模板题。 // 01trie模板。。。 class Solution { public: int findMaximumXOR(vect
阅读全文
摘要:以下是常规线段树模板,采用0-based、左闭右开写法,支持单点修改(含赋值set和增加add)、区间查询find、查找第一个满足条件元素findFirst、查找最后一个满足条件元素findLast。 template<class Val> struct SegTree { int n = 0; s
阅读全文
摘要:给定数组num[n],如果一个子序列中任意两个相邻元素的绝对差恰好为1,则称它为好子序列,返回nums中所有好子序列的元素之和,结果对1E9+7取模。注意,长度为1的子序列算好子序列。 1<=n<=1E5; 0<=nums[i]<=1E5 分析:设f[x]表示以x结尾的所有子序列元素之和,g[x]表
阅读全文
摘要:给定长度为n的二维数组{x[i],y[i]}和一个整数k,其中0<=k<n,从中选中若干个点排序构成序列,求最长的点序列满足x[i]<x[i+1]并且y[i]<y[i+1],要求第k个点必须选择,返回最长序列的长度。 1<=n<=1E5; 0<=x[i],y[i]<=1E9;各个点互不相同 分析:可
阅读全文
摘要:n名玩家在玩传球游戏,编号为i的玩家固定会把球传给编号为r[i]的玩家,任选一名玩家开始传球,恰好传k次,得分为这k次传球内所有接触过球的玩家的编号之和,如果玩家多次触球,则累加多次。问从哪个玩家开始传,能获得最大总得分,求最大得分。 1<=n<=1E5; 0<=r[i]<n; 1<=k<=1E10
阅读全文
摘要:给定长度为n的数组nums和整数k,可以对数组执行至多k次操作,每次选择1个nums[i],将其增加或减少1,最终数组的频率分数定义为数组众数的频率,求可以得到的最大频率分数。 1<=n<=1E5; 1<=nums[i]<=1E9; 0<=k<=1E14 分析: (1)中位数贪心:对于有序数组,如果
阅读全文
摘要:一个文档可以用某个int集合来表示,两个文档的相似度定义为对应集合的交集大小除以并集大小,例如{1,5,3}与{1,7,2,3}的相似度为0.4。给定n个相似度很稀疏的文档,返回所有相似度大于0的组合。 1<=n<=500, 1<=set[i]<=500 分析:采用类似倒排索引的做法,对集合中的每个
阅读全文
摘要:给定n个闭区间,求一个集合使得每个区间都至少有两个整数在其中,问集合至少包含多少个元素? 1<=n<=3000; 0<=start[i]<end[i]<=1E8 分析:将区间按end升序、start降序排序,维护集合的最大和次大值,分情况讨论,贪心选择靠右边的点。 class Solution {
阅读全文
摘要:给定字符串S,每次操作会复制一份并改变大小写追加到原字符串后面。有Q组询问,每次输出K[i],输出结果中第K[i]个字符是什么? 1<=|S|<=2E5, 1<=Q<=2E5, 1<=K[i]<=1E18 分析:依次处理每个询问,先倍增到能覆盖询问的长度,然后倒推出该字符由S的哪个字符得到,以及大小
阅读全文
摘要:N个人排成一排,第i个人的口味度为A[i];M块寿司放在传送带上依次经过这N个人,第i块寿司的美味度为B[i]。如果寿司的美味度不低于当前人的口味度,则会吃掉寿司,问各块寿司会被谁吃掉,如果都不吃,输出-1。 1<=N,M,A[i],B[i]<=2E5 分析:从左到右枚举各块寿司,在口味度数组中找第
阅读全文