- 博客(142)
- 收藏
- 关注
原创 LeetCode 热题 100 - 双指针 - 11
这个题我之前做过一次,是遍历y轴,就是从上往下遍历,来寻找最大的,但是今天看了题解之后,发现双指针的做法好像更好一点,废话不说,直接代码!图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2025-06-11 21:03:50
180
原创 LeetCode 热题 100 - 双指针 - 15
给出一个更加适合小白的双指针版本,左右指针更加清晰一点。(其实是没写出来很快的,啊哈哈哈哈哈)不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。唯一可能的三元组和为 0。,判断是否存在三元组。
2025-06-05 17:20:07
266
原创 LeetCode 热题 100 - 双指针 - 283
移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。右指针左边直到左指针处均为零。,编写一个函数将所有。左指针左边均为非零数;
2025-06-05 15:30:19
208
原创 LeetCode 热题 100 - 哈希 - 128
直接将数组进行排序,然后根据不同的情况直接进行判断就可以了。感觉不像是mid题目。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是 [1, 2, 3, 4]。请你设计并实现时间复杂度为。给定一个未排序的整数数组。
2025-06-05 15:04:17
325
原创 LeetCode 热题 100 - 哈希 - 49
这道题可以用排序 + 哈希的办法进行操作,我们把排序后的字符串当做哈希表的key,然后将原字符串当做value,这样的话我们就可以进行筛选了,然后把value的结果重新进行存储就可以了。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。
2025-06-05 14:26:29
310
原创 LeetCode 热题 100 - 哈希 - 1
这个题就是冒泡排序的变种题目吧,直接用冒泡排序的方法来遍历数组,找到符合条件的代码就可以了。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。
2025-06-05 13:22:12
282
原创 LeetCode刷题---贪心算法---1221
注意,s 无法分割为 "RL"、"RR"、"RL"、"LR"、"LL" 因为第 2 个和第 5 个子字符串不是平衡字符串。s 可以分割为 "RL"、"RRLL"、"RL"、"RL" ,每个子字符串中都包含相同数量的 'L' 和 'R'。s 可以分割为 "RL"、"RRRLLRLL",每个子字符串中都包含相同数量的 'L' 和 'R'。easy题,一遍就AC(没想到),直接代码。s 只能保持原样 "LLLLRRRR"。返回可以通过分割得到的平衡字符串的。字符的数量是相同的。
2025-06-04 18:09:42
276
原创 LeetCode刷题---贪心算法---1217
我们可以把位置3的两个筹码移到位置2。很简单的问题,只要想明白就超级超级简单。我们需要把所有筹码移到同一个位置。在一步中,我们可以将第。第二步:将位置2的筹码移动到位置1,成本= 1。第一步:将位置3的筹码移动到位置1,成本为0。返回将所有筹码移动到同一位置上所需要的。
2025-06-04 17:46:02
379
原创 LeetCode刷题---贪心算法---1046
排序就好,只要元素个数大于1,就排序,然后粉碎,分情况进行讨论即可,直接上代码。最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。最后,最多只会剩下一块石头。如果没有石头剩下,就返回。先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1],再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1],接着是 2 和 1,得到 1,所以数组转换为 [1,1,1],石头,然后将它们一起粉碎。假设石头的重量分别为。有一堆石头,每块石头的重量都是正整数。
2025-06-04 16:08:52
152
原创 LeetCode刷题---贪心算法---1029
我们这样来看这个问题,公司首先将这 2N 个人全都安排飞往 B 市,再选出 N 个人改变它们的行程,让他们飞往 A 市。如果选择改变一个人的行程,那么公司将会额外付出 price_A - price_B 的费用,这个费用可正可负。这道题我自己没什么思路,可能刚刚接触贪心算法,有点菜,但是这道题真的很好,想明白之后确实很巧妙感觉。最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。第一个人去 a 市,费用为 10。第二个人去 a 市,费用为 30。
2025-06-04 15:38:55
338
原创 LeetCode刷题---贪心算法---944
说实话,这道题没有看到贪心的影子,我直接遍历就可以了,这样很容易理解,直接上代码。列 0 和列 2 按升序排列,但列 1 不是,所以只需要删除列 1。只有列 0 这一列,且已经按升序排列,所以不用删除任何列。在上面的例子(下标从 0 开始)中,列 0(这些字符串可以每个一行,排成一个网格。所有 3 列都是非升序排列的,所以都要删除。)都是按字典序非严格递增排列的,而列 1(个小写字母字符串组成的数组。)不是,所以要删除列 1。,其中每个字符串长度相等。返回你需要删除的列数。
2025-06-04 13:29:56
441
原创 LeetCode刷题---双指针---986
很简单,我都做好了大战三百回合的准备了,结果这就AC了?是一组实数,要么为空集,要么为闭区间。每个区间列表都是成对。
2025-03-29 10:01:24
399
原创 LeetCode刷题---双指针---524
很简单的一道题,就是代码有麻烦,一定要细心一点。返回字母序最小的字符串,我们首先可以把vector排序,然后进行遍历,保存长度最长且满足条件的字符串即可。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。中最长的字符串,该字符串可以通过删除。
2025-03-29 09:47:40
263
原创 LeetCode刷题---双指针---485
给定一个二进制数组nums, 计算其中最大连续1的个数。3开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.201。
2025-03-28 10:18:29
184
原创 LeetCode刷题---双指针---75
原地排序就是不开辟新的空间,在给出的数据空间进行排序。对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。必须在不使用库内置的 sort 函数的情况下解决这个问题。第一次遇到12就往后找0的位置交换。第二次遇到2就往后找1的位置交换。给定一个包含红色、白色和蓝色、共。分别表示红色、白色和蓝色。
2025-03-28 09:59:29
138
原创 LeetCode刷题---双指针---56
我们首先将这个容器进行排序,然后对每一个数组进行操作就可以了。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。
2025-03-03 16:59:03
270
原创 LeetCode刷题---双指针---532
思路很简单,当k=0的时候,就统计数组中相同元素的个数就可以了。当k≠0时,我们可以想把数组存储到一个set中,这样保证了顺序也去除了相同的元素,然后利用双指针就可以解决问题了。数组中有四个 1-diff 数对, (1, 2), (2, 3), (3, 4) 和 (4, 5)。数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。尽管数组中有两个 1 ,但我们只应返回不同的数对的数量。数组中只有一个 0-diff 数对,(1, 1)。k-diff 数对,并返回不同的。
2025-02-27 21:37:17
414
原创 LeetCode刷题---双指针---925
如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回。'e' 一定需要被键入两次,但在 typed 的输出中不是这样。'alex' 中的 'a' 和 'e' 被长按。直接看代码注释吧,很简单的。你的朋友正在使用键盘输入他的名字。,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符。
2025-02-27 16:15:38
272
原创 LeetCode刷题---栈---84
自己没做出来,看的别人的题解,用的单调栈!后面会专门弄一个专题,介绍这个,这里就不细说了。个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。最大的矩形为图中红色区域,面积为 10。
2025-02-27 16:02:42
313
原创 LeetCode刷题---栈---1209
维护一个存储pair的栈,第一维是字符串的元素,第二维是连续出现的次数,然后遍历整个字符串即可,如果出现的次数满足,就出栈,不满足就自增,直到遍历完整个数组。个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。先删除 "eee" 和 "ccc",得到 "ddbbbdaa"重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作后,返回最终得到的字符串。再删除 "bbb",得到 "dddaa"最后删除 "ddd",得到 "aa"倍重复项删除操作」将会从。
2025-02-26 22:38:46
245
原创 LeetCode刷题---栈---1190
思路很简单,就是在没遇到 )的时候,一直将字符入栈,碰到 ) 的时候,将元素出栈,存储起来,直到在栈中遇到 ( ,然后将存储的元素反向入栈即可,直到遍历完字符串中的所有元素。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。先反转子字符串 "oc" ,接着反转 "etco" ,然后反转整个字符串。先反转子字符串 "love" ,然后反转整个字符串。(仅含有小写英文字母和括号)。
2025-02-26 20:35:09
272
原创 LeetCode刷题---栈---1003
我们遍历字符串,将字符串一个一个入栈,如果不是 'c' 的话,就直接入栈,如果是 'c' 就判断一下此时栈顶是不是 'b' ,如果不是直接返回false,如果是将 'b' 出栈,然后判断栈顶元素是不是 'a',如果不是直接返回false。最后判断栈中是否还有元素,如果还有就返回false,如果没有就返回true。因此,"abcabcababcc" 有效。执行操作无法得到 "abccba"。需要满足:假设开始有一个空字符串。因此,"aabcbc" 有效。
2025-02-26 18:47:49
336
原创 LeetCode刷题---栈---946
就是把pushed按照popped的方式进行入栈,如果popped的元素不在栈中,那么就将pushed所找元素之前的全部压入栈中,如果在栈中,那就观察栈顶元素是不是所找的元素,如果不是就返回false。,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回。两个序列,每个序列中的。1 不能在 2 之前弹出。
2025-02-26 18:12:13
241
原创 LeetCode刷题---栈---921
我只能说这道题最恶心的地方就是题目很难读懂,其实读懂了就很简单,直接用栈就轻松解决。,在每一次操作中,你都可以在字符串的任何位置插入一个括号。有效而必须添加的最少括号数。
2025-02-26 17:19:08
175
原创 LeetCode刷题---栈---739
遍历整个数组,将整个数组压入栈中,找到符合条件的元素,出栈即可。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。,表示每天的温度,返回一个数组。
2025-02-25 19:15:23
287
原创 LeetCode刷题---栈---636
函数 0(初始调用)在时间戳 7 的起始恢复执行,执行 1 个单位时间,于时间戳 7 的末尾结束执行。函数 0 在时间戳 0 的起始开始执行,执行 2 个单位时间,于时间戳 1 的末尾结束执行。函数 1 在时间戳 2 的起始开始执行,执行 4 个单位时间,于时间戳 5 的末尾结束执行。函数 1在时间戳 6 的起始开始执行,执行 1 个单位时间,于时间戳 6 的末尾结束执行。函数 0 在时间戳 0 的起始开始执行,执行 2 个单位时间,并递归调用它自身。函数 0(初始调用)恢复执行,并立刻再次调用它自身。
2025-02-25 16:30:48
899
原创 LeetCode刷题---栈---394
我的思路是和一个括号匹配的题一样,不管是数字,字母还是 [ ,全部入栈,直到碰到 ] 之后,将栈中元素依次出栈,一直到碰到 [ 为止停止出栈,然后观察此时栈顶的数字(也要出栈),将出栈的元素根据栈顶的数字进行复制几遍,然后再重新压入栈中,依次循环,直到结束!输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。我可算体会到栈这个地方的恶心了,全是边界条件啊啊!此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。,表示其中方括号内部的。
2025-02-25 15:22:52
302
原创 LeetCode刷题---栈---1047
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。easy题没什么好说的,直接用栈就随随便便解决啦。在完成所有重复项删除操作后返回最终的字符串。上反复执行重复项删除操作,直到无法继续删除。会选择两个相邻且相同的字母,并删除它们。给出由小写字母组成的字符串。
2025-02-24 22:20:52
278
原创 LeetCode刷题---栈---844
直接遍历字符串,将字符串的有效字符存储到栈中,然后对比一下两个栈就可以了。两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。s 会变成 "c",但 t 仍然是 "b"。如果对空文本输入退格字符,文本继续为空。s 和 t 都会变成 "ac"。s 和 t 都会变成 ""。
2025-02-24 21:41:25
170
原创 LeetCode刷题---栈---682
"+" - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]"+" - 记录加 -4 + 9 = 5 ,记录现在是 [5, -2, -4, 9, 5]"D" - 记录加 2 * -2 = -4 ,记录现在是 [5, -2, -4]"9" - 记录加 9 ,记录现在是 [5, -2, -4, 9]"4" - 记录加 4 ,记录现在是 [5, -2, 4]"-2" - 记录加 -2 ,记录现在是 [5, -2]"2" - 记录加 2 ,记录现在是 [5, 2]
2025-02-24 20:51:05
769
原创 LeetCode刷题---栈---225
直接用一个队列来实现,就是在入队列的时候,保留新入队的元素,其他的元素重新进行入队列,这样就可以保证队列中的元素和栈的存储方式是一样的。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(myStack.empty();// 返回 False。
2025-02-24 16:58:39
330
原创 LeetCode刷题---栈---155
设计两个栈,一个栈用来存储数据,另一个栈用来维护最小的数据,这样就可以实现O(1)的时间复杂度来获取最小的元素。--> 返回 -3.minStack.getMin();--> 返回 -2.minStack.top();操作,并能在常数时间内检索到最小元素的栈。
2025-02-24 16:14:31
276
原创 LeetCode刷题---二分查找---792
我的思路是用一个哈希表存储一个存储每一个字母以及字符在S中出现的位置(一个列表)。然后将words存储到一个哈希表中,因为可能重复,然后对这个哈希表进行判断进行探索,得到最终的结果。是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其余字符的相对顺序。有三个是 s 的子序列的单词: "a", "acd", "ace"。
2025-02-24 12:46:43
297
原创 LeetCode刷题---二分查找---454
给你四个整数数组nums1nums2nums3和nums4,数组长度都是n,请你计算有多少个元组2两个元组如下:1直接上哈希表,将前两个的数组的和存储的哈希表中,然后有两个数组的和的相反数存储到哈希表中,这样就可以对比出结果了。
2025-02-23 22:16:34
402
原创 LeetCode刷题---二分查找---162
1.若nums[mid] < nums[mid + 1] 则mid ~ n 一定有峰值。2.若nums[mid] > nums[mid + 1] 则0 ~ mid 一定有峰值。对于所有有效的 i 都有 nums[i]!= nums[i + 1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回。或者返回索引 5, 其峰值元素为 6。3 是峰值元素,你的函数应该返回其索引 2。你的函数可以返回索引 1,其峰值元素为 2;峰值元素是指其值严格大于左右相邻值的元素。的算法来解决此问题。
2025-02-22 17:03:18
295
原创 LeetCode刷题---二分查找---153
也是利用二分查找,就是判断中间的元素的大小情况,如果中间的元素比两边的元素都要小,那么就让右边界左移,如果中间的元素比两边的元素都要大,那么就让左边界右移,如果不满足上述两种情况的话,说明这个数组一定是排好序的。,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。的数组,预先按照升序排列,经由。
2025-02-22 16:34:49
363
原创 LeetCode刷题---二分查找---34
我的思路是利用二分查找,找到小于target的最大元素,然后根据这个位置再进行遍历就行了。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。
2025-02-22 15:31:19
285
原创 LeetCode刷题---二分查找---744
letters 中没有一个字符在字典上大于 'z',所以我们返回 letters[0]。letters 中字典顺序上大于 'c' 的最小字符是 'f'。letters 中字典上比 'a' 大的最小字符是 'c'。直接看代码吧,有注释的,有点混乱我现在。如果不存在这样的字符,则返回。
2025-02-22 13:40:10
264
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人