
数据结构基础题目练习
文章平均质量分 53
各类数据结构题目解题思路分享
码卡巴卡bug
正在学习的小菜鸟一枚
展开
-
滑动窗口:练习题目25
最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。感觉还是挺艰难的,特别是涵盖的部分,我还去学习了涵盖的表示。t 中两个字符 'a' 均应包含在 s 的子串中,表示)所需要的所有字符,并且字符的频率要足够。因此没有符合条件的子字符串,返回空字符串。所有字符的子串,则返回空字符串。整个字符串 s 是最小覆盖子串。中的每个字符的频率都至少和。字符的数量是 3,已经满足。字符的数量是 1,刚好满足。所有字符的最小子串。时间内解决此问题的算法吗?中的相同字符的频率一样多。原创 2025-04-23 17:23:48 · 361 阅读 · 0 评论 -
滑动窗口:练习题目24
在这个例子中 infinite_nums = [1,1,1,2,3,1,1,1,2,3,1,1,...].区间 [1,2] 内的子数组的元素和等于 target = 5 ,且长度 length = 2。区间 [4,5] 内的子数组的元素和等于 target = 4 ,且长度 length = 2。在这个例子中 infinite_nums = [1,2,3,1,2,3,1,2,...]。在这个例子中 infinite_nums = [2,4,6,8,2,4,6,8,...]。原创 2025-04-23 16:26:06 · 592 阅读 · 0 评论 -
滑动窗口:练习题目23
我们需要把一个 'Q' 替换成 'R',这样得到的 "RQWE" (或 "QRWE") 是平衡的。主要思想是除了替换的字符串,剩下的其他字符需要满足什么条件。我们可以替换后 3 个 'Q',使 s = "QWER"。我们可以把前面的 "QQ" 替换成 "ER"。,请通过「替换一个子串」的方式,使原字符串。如果原字符串自身就是一个平衡字符串,则返回。次,那么它就是一个「平衡字符串」。你可以用和「待替换子串」长度相同的。请返回待替换子串的最小可能长度。变成一个「平衡字符串」。给你一个这样的字符串。原创 2025-04-23 11:20:14 · 94 阅读 · 0 评论 -
滑动窗口:练习题目22
注意可以将题目转化一下,我们不用考虑两侧的而是考虑中间留下的,他们的和为sum(nums)-x,并且需要他们最长。最佳解决方案是移除后三个元素和前两个元素(总共 5 次操作),将 x 减到 0。最佳解决方案是移除后两个元素,将 x 减到 0。每一次操作时,你应当移除数组。最左边或最右边的元素,然后从。数组以供接下来的操作使用。原创 2025-04-22 20:40:36 · 343 阅读 · 0 评论 -
滑动窗口:练习题目21
或者我们可以将第二个 'F' 换成 'T' ,得到 answerKey = "TTF。题目的关键在于我们能修改的最大次数是k,也就是T和F中较少的一方最大出现次数是k次。或者,我们可以将第二个 'T' 换成 'F' ,得到 answerKey = "T。我们可以将最前面的 'T' 换成 'F' ,得到 answerKey = "我们可以将两个 'F' 都变为 'T' ,得到 answerKey = "我们可以将第一个 'F' 换成 'T' ,得到 answerKey = "总共有四个连续的 'T'。原创 2025-04-22 13:10:29 · 295 阅读 · 0 评论 -
滑动窗口:练习题目21
最长好子数组是 [1,2,3,1,2,3] ,值 1 ,2 和 3 在子数组中的频率都没有超过 k = 2。[2,3,1,2,3,1] 和 [3,1,2,3,1,2] 也是好子数组。最长好子数组是 [1,2] ,值 1 和 2 在子数组中的频率都没有超过 k = 1。[2,1] 也是好子数组。最长好子数组是 [5,5,5,5] ,值 5 在子数组中的频率没有超过 k = 4。指的是一个数组中一段连续非空的元素序列。最长好子数组的长度为 6。最长好子数组的长度为 2。最长好子数组的长度为 4。原创 2025-04-22 13:00:09 · 144 阅读 · 0 评论 -
滑动窗口:练习题目20
就是求和最大且元素不同的子数组。最优子数组是 [5,2,1] 或 [1,2,5]的一个连续子序列,即如果它等于。最优子数组是 [2,4,5,6],请你从中删除一个含有。原创 2025-04-22 12:53:54 · 183 阅读 · 0 评论 -
滑动窗口:练习题目19
这道题主要是转换思路,我们要让老板不生气的时间尽量放在客人损失最多的时间段里。也就是最多的客人数 = 老板不控制生气时的所有客人数 + minutes分钟损失最多客人数。感到满意的最大客户数量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.当书店老板生气时,那一分钟的顾客就会不满意,若老板不生气则顾客是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续。分钟开始时进入商店的顾客数量,所有这些顾客在第。在某些分钟内,书店老板会生气。有一个书店老板,他的书店开了。原创 2025-04-14 17:06:28 · 161 阅读 · 0 评论 -
滑动窗口:练习题目18
第一次行动,不管拿哪张牌,你的点数总是 1。但是,先拿最右边的卡牌将会最大化你的可获得点数。学习了一下别人的逆向思维:前后各拿走之后剩下的牌一定是连续的。也就是剩下的连续的n-k张牌的和最小为a时,拿走的sum(cardpoints)-a也就最大。你无法拿到中间那张卡牌,所以可以获得的最大点数为 1。你必须拿起所有卡牌,可以获得的点数为所有卡牌的点数之和。无论你拿起哪两张卡牌,可获得的点数总是 4。你的点数就是你拿到手中的所有卡牌的点数之和。前k-1个后1个的和。前1个后k-1个的和。原创 2025-04-14 16:42:41 · 370 阅读 · 0 评论 -
滑动窗口:练习题目17
因为 15 是满足全部条件的所有子数组中的最大子数组和,所以返回 15。返回满足题面要求的最大子数组和。- [2,9,9] 不满足全部条件,因为元素 9 出现重复。- [9,9,9] 不满足全部条件,因为元素 9 出现重复。- [4,4,4] 不满足全部条件,因为元素 4 出现重复。- [1,5,4] 满足全部条件,和为 10。- [5,4,2] 满足全部条件,和为 11。- [4,2,9] 满足全部条件,和为 15。因为不存在满足全部条件的子数组,所以返回 0。是数组中一段连续非空的元素序列。原创 2025-04-14 16:00:29 · 560 阅读 · 0 评论 -
常用数据结构(前缀和):练习题目4
如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个。主要是运用了pairwise函数,让元素两两配对。,请你帮助你检查 子数组。2 和 6 都是偶数。原创 2025-04-10 12:15:48 · 299 阅读 · 0 评论 -
常用数据结构(前缀和):练习题目3
以元音开头和结尾的字符串是 "aba"、"ece"、"aa" 和 "e"。查询 [1,4] 结果为 3(字符串 "ece"、"aa"、"e")。查询 [0,2] 结果为 2(字符串 "aba" 和 "ece")。每个字符串都满足这一条件,所以返回 [3,2,1]。这两个值)并且以元音开头和结尾的字符串的数目。返回一个整数数组,其中数组的第。查询 [1,1] 结果为 0。返回结果 [2,3,0]。以及一个二维整数数组。原创 2025-04-10 11:33:43 · 242 阅读 · 0 评论 -
常用数据结构(前缀和):练习题目2
返回为数组中每个下标定义的子数组中所有元素的总和。因此,输出为 13。因此,输出 11。),定义对应的子数组。是数组中的一个连续、原创 2025-04-10 11:05:19 · 171 阅读 · 0 评论 -
常用数据结构(前缀和):练习题目1
【代码】常用数据结构(前缀和):练习题目1。原创 2025-04-09 20:09:28 · 269 阅读 · 0 评论 -
常用数据结构(枚举):练习题目4
这个三元组的元素和等于 nums[1] + nums[3] + nums[5] = 13。这个三元组的元素和等于 nums[2] + nums[3] + nums[4] = 9。学习了一下别人的题解,重点在于我们要把数分为,j,j前面所有元素的最小值pre,j后面所有元素的最小值suf。- nums[2] < nums[3] 且 nums[4] < nums[3]- nums[1] < nums[3] 且 nums[5] < nums[3]可以证明 nums 中不存在山形三元组。原创 2025-04-09 14:55:25 · 207 阅读 · 0 评论 -
常用数据结构(枚举):练习题目3
这两个操作,它们的时间复杂度都是 O(n),从而导致整体时间复杂度达到 O(n2)。- 矩形 2 和矩形 3 :10/20 == 15/30。- 矩形 0 和矩形 2 :4/8 == 10/20。- 矩形 0 和矩形 3 :4/8 == 15/30。- 矩形 1 和矩形 2 :3/6 == 10/20。- 矩形 1 和矩形 3 :3/6 == 15/30。(使用实数除法而非整数除法),则认为这两个矩形。- 矩形 0 和矩形 1 :4/8 == 3/6。)的宽高比相同,则认为这两个矩形。个矩形的宽度和高度。原创 2025-04-09 14:20:15 · 224 阅读 · 0 评论 -
常用数据结构(枚举):练习题目2
有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始。的不同就是我们不需要存储索引位置了,因此列表即可。数组中的每组数字都是好数对。,就可以认为这是一组。原创 2025-04-08 16:57:47 · 286 阅读 · 0 评论 -
常用数据结构(枚举):练习题目1
注意2其中用到的算法思想,遍历j,将j左边存入哈希表,在哈希表中寻找target-nums[j]。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以想出一个时间复杂度小于。你可以按任意顺序返回答案。,请你在该数组中找出。原创 2025-04-08 16:47:58 · 204 阅读 · 0 评论 -
贪心算法:练习题目1
个包裹中的苹果重新分装到箱子中,返回你需要选择的箱子的。总容量大于或等于苹果的总数,所以可以完成重新分装。,同一个包裹中的苹果可以分装到不同的箱子中。注意先装大箱子,就能保证用的箱子最少了。使用容量为 4 和 5 的箱子。请你选择一些箱子来将这。原创 2025-04-08 16:03:46 · 346 阅读 · 0 评论 -
二分算法:练习题目9
这个是我的做法但是提交上去好像时长比较长啊,我对比了一下主要原因是我忽略了citations这个数组是升序排列的。给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6。:h 代表“高引用次数”(high citations),一名科研人员的。请你设计并实现对数时间复杂度的算法解决此问题。被引用了 3 次,其余两篇论文每篇被引用。由于研究者有3篇论文每篇。计算并返回该研究者的 h。指数是指他(她)的 (篇论文被引用的次数,原创 2025-04-08 15:45:01 · 675 阅读 · 0 评论 -
二分算法:练习题目8
难度主要是在当我们假设了船舶载重,怎么求出这个载重下对应的天数,也就是def solvedays(weights,mid)函数的内容。请注意,货物必须按照给定的顺序装运,因此使用载重能力为 14 的船舶并将包装分成 (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) 是不允许的。天内将传送带上的所有包裹送达的船的最低运载能力。第 1 天:1, 2, 3, 4, 5。第 2 天:6, 7。第 1 天:3, 2。第 2 天:2, 4。第 3 天:1, 4。第 4 天:1, 1。原创 2025-04-07 16:22:43 · 265 阅读 · 0 评论 -
二分算法:练习题目7
时刻 t = 1 ,每辆公交车完成的旅途数分别为 [1,0,0]。- 时刻 t = 2 ,每辆公交车完成的旅途数分别为 [2,1,0]。- 时刻 t = 3 ,每辆公交车完成的旅途数分别为 [3,1,1]。完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以。已完成的总旅途数为 1 + 0 + 0 = 1。已完成的总旅途数为 2 + 1 + 0 = 3。已完成的总旅途数为 3 + 1 + 1 = 5。所以总共完成至少 5 趟旅途的最少时间为 3。所以完成 1 趟旅途的最少时间为 2。原创 2025-04-07 15:40:40 · 119 阅读 · 0 评论 -
二分算法:练习题目6
一开始理解题目理解成“选择一个正整数”是从数组里选择了,怎么也做不出来。后来发现是任意选择,那么范围就来到了1~∞,可以缩小为1~max(nums)如果除数为 4 ,我们可以得到和为 7 (1+1+2+3)。如果除数为 5 ,和为 5 (1+1+1+2)。,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。每个数除以除数后都向上取整,比方说 7/3 = 3 , 10/2 = 5。如果除数为 1 ,我们可以得到和为 17 (1+2+5+9)。请你找出能够使上述结果小于等于阈值。原创 2025-04-07 15:23:51 · 300 阅读 · 0 评论 -
二分算法:练习题目5
第 1 个咒语:1 * [1,2,3,4,5] = [1,2,3,4,5]。- 第 1 个咒语:1 * [8,5,8] = [8,5,8]。- 第 2 个咒语:3 * [1,2,3,4,5] = [3,6,- 第 0 个咒语:5 * [1,2,3,4,5] = [5,- 第 0 个咒语:3 * [8,5,8] = [- 第 2 个咒语:2 * [8,5,8] = [总共 3 个成功组合。所以返回 [4,0,3]。总共 2 个成功组合。总共 2 个成功组合。所以返回 [2,0,2]。原创 2025-04-07 15:21:31 · 279 阅读 · 0 评论 -
二分算法:练习题目4
注意,pos最后指定位置为正整数开始位置,neg为负整数结束位置。正整数开始位置即>=1的位置,负整数结束位置即>=0的位置-1。共有 3 个正整数和 3 个负整数。计数得到的最大值是 3。共有 2 个正整数和 3 个负整数。计数得到的最大值是 3。共有 4 个正整数和 0 个负整数。计数得到的最大值是 4。,返回正整数数目和负整数数目中的最大值。你可以设计并实现时间复杂度为。既不是正整数也不是负整数。的算法解决此问题吗?原创 2025-04-07 13:20:47 · 622 阅读 · 0 评论 -
二分算法:练习题目3
是>=target的,那么>target实际上就是>=target + 1,<target实际上就是(>=target)的返回值再-1,<=target实际上就是(>target)的返回值再-1也就是(>=target + 1)的返回值再-1。letters 中没有一个字符在字典上大于 'z',所以我们返回 letters[0]。letters 中字典顺序上大于 'c' 的最小字符是 'f'。letters 中字典上比 'a' 大的最小字符是 'c'。如果不存在这样的字符,则返回。的最小的字符,我们的。原创 2025-04-07 12:05:14 · 858 阅读 · 0 评论 -
二分算法:练习题目2
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:[3,4]示例 2:[-1,-1]示例 3:[-1,-1]nums是一个非递减数组。原创 2025-04-07 12:00:23 · 260 阅读 · 0 评论 -
二分算法:练习题目1
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。这里是使用的【left,right】前闭后闭。注意若不存在target,left会等于len(nums)请必须使用时间复杂度为。原创 2025-04-07 11:58:27 · 243 阅读 · 0 评论 -
滑动窗口:练习题目16
的所有子字符串中,除了长度大于 5 的子字符串外,其余子字符串都满足 k 约束。”,那么不满足也就是两个条件都不满足时进入while。不要把and错写为or,注意审题,“满足以下任一条件,则认为该字符串满足。满足以下任一条件,则认为该字符串满足。外,其余子字符串都满足 k 约束。的所有子字符串都满足 k 约束。的所有子字符串中,除了。原创 2025-04-03 16:30:20 · 242 阅读 · 0 评论 -
滑动窗口:练习题目15
8 个乘积小于 100 的子数组分别为:[10]、[5]、[2]、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。因为是乘积小于k的,因此right和left内所有元素组成的各个子数组都满足乘积小于k,因此。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。,请你返回子数组内所有元素的乘积严格小于。的连续子数组的数目。原创 2025-04-03 16:03:08 · 129 阅读 · 0 评论 -
滑动窗口:练习题目14
主要需要注意的是,循环每次只判断c所在元素的数量。所有子字符串都有效,因为每个字符至少出现一次。的所有子字符串中,请你统计并返回。是字符串中的一个连续、原创 2025-04-03 15:14:09 · 230 阅读 · 0 评论 -
滑动窗口:练习题目13
包含元素 3 至少 2 次的子数组为:[1,3,2,3]、[1,3,2,3,3]、[3,2,3]、[3,2,3,3]、[2,3,3] 和 [3,3]。次的子数组,并返回满足这一条件的子数组的数目。没有子数组包含元素 4 至少 3 次。子数组是数组中的一个连续元素序列。请你统计有多少满足 「原创 2025-04-03 14:31:43 · 149 阅读 · 0 评论 -
滑动窗口:练习题目12
注意ans += left,本题中是因为若某一字符串满足要求,那么想左延伸的每个字符串都满足要求,如abcabc这一字符串,bca满足要求,那么abca也满足要求。包含 a,b 和 c 各至少一次的子字符串为。包含 a,b 和 c 各至少一次的子字符串为。,它只包含三种字符 a, b 和 c。请你返回 a,b 和 c 都。出现过一次的子字符串数目。原创 2025-04-03 14:20:36 · 145 阅读 · 0 评论 -
滑动窗口:练习题目11
长度为 5 且字典序最小的美丽子字符串是子字符串 "11001"。长度为 2 且字典序最小的美丽子字符串是子字符串 "11"。中不含美丽子字符串,则返回一个。最短美丽子字符串的长度是 5。最短美丽子字符串的长度是 2。中的对应字符,则认为字符串。,则称这个子字符串是一个。中该位置上的字符严格大于。对于相同长度的两个字符串。出现不同的第一个位置上,7. 子字符串 "1000。示例中不存在美丽子字符串。6. 子字符串 "100。美丽子字符串的长度。5. 子字符串 "10。3. 子字符串 "10。原创 2025-04-03 13:53:29 · 365 阅读 · 0 评论 -
滑动窗口:练习题目10
需要注意因为最后要取较小的值,ans最大也就是len(nums),所以初始值比它大即可,当然也可以把它初值设为inf。子数组 [4,3]是该条件下的长度最小的子数组。如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。原创 2025-04-02 16:13:23 · 213 阅读 · 0 评论 -
滑动窗口:练习题目9
主要难点在于怎么判断目前只有两种水果,我这里用了字典,并且要在每次更新时看是否有水果数目为0了,记得删除这个字典键值对。你想要尽可能多地收集水果。你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组。如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。可以采摘 [1,2,1,1,2] 这五棵树。可以采摘 [2,3,2,2] 这四棵树。可以采摘 [1,2,2] 这三棵树。,返回你可以收集的水果的。可以采摘全部 3 棵树。原创 2025-04-02 16:00:33 · 268 阅读 · 0 评论 -
滑动窗口:练习题目8
主要要意识到的问题就是这个题目其实就是在求数组中子列和小于阈值的最长子列,典型的变长滑动窗口。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。s 中的任一字符要想变成 t 中对应的字符,其开销都是 2。的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。a -> a, cost = 0,字符串未发生变化,所以最大长度为 1。开销为 3,所以最大长度为 3。中对应的子字符串,则返回可以转化的最大长度。中对应的子字符串,则返回。给你两个长度相同的字符串,原创 2025-04-02 14:45:04 · 199 阅读 · 0 评论 -
滑动窗口:练习题目7
删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1]。注意最后ans减一是因为我们计算的长度是包含删除的0在内的长度,最后还要删掉0,因此减一。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。删掉位置 2 的数后,[1,1,1] 包含 3 个 1。如果不存在这样的子数组,请返回 0。,你需要从中删掉一个元素。你必须要删除一个元素。原创 2025-04-02 14:27:20 · 362 阅读 · 0 评论 -
滑动窗口:练习题目6
我感觉这道不定长滑动窗口的题目和定长的最大区别就在于,它使用了left和right两个指针,注意其遍历的是right指针来避免比较left和right。因为无重复字符的最长子串是 "abc",所以其长度为 3。因为无重复字符的最长子串是 "wke",所以其长度为 3。因为无重复字符的最长子串是 "b",所以其长度为 1。,请你找出其中不含有重复字符的。请注意,你的答案必须是。的长度,"pwke" 是一个。原创 2025-04-02 14:05:19 · 144 阅读 · 0 评论 -
滑动窗口:题目练习5
分别为 [5, 9, 9] ,[9, 9, 2] ,[9, 2, 4] ,[2, 4, 5] 和 [4, 5, 4]。这些子数组中,和最大的是 [5, 9, 9] ,和为 23。分别为 [2, 6, 7, 3] ,[6, 7, 3, 1] 和 [7, 3, 1, 7]。这些子数组中,和最大的是 [2, 6, 7, 3] ,和为 18。改进之后使用defaultdict函数生成默认值为0的字典,字典键即数组中元素,值即为该元素出现次数,减少了时间复杂度。所以不存在几乎唯一子数组,最大和为 0。原创 2025-04-01 20:31:53 · 275 阅读 · 0 评论