- 博客(13)
- 收藏
- 关注
原创 leetcode hot100——53.最大子数组和
另一类是拼接,适用于子数组问题(需要连续),这里应该使用拼接的思想,构建动态规划数组s,s[i]含义为以nums[i]结尾的子数组的最大值,递推关系很容易想到,之后进行合理的初始化就可以启动了。涉及字数组问题,还是首先想到前缀和,先按模版初始化前缀和数组,然后遍历这个数组,找到相差最大的前缀和即可,方法是在遍历的过程中,维护当前元素之前的最小元素,具体请看代码。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。
2025-08-03 16:02:33
467
原创 leetcode hot100——560.和为K的子数组
前缀和,还是通过空间换时间的方式,通过一个数组来记录前n个元素的和是多少,那么任何一个子序列的和就可以通过数组内对应的两个元素相减来获得,这个操作的复杂度是O(1)的,而这个数组可以通过类似动态规划或者递推的方式初始化,那么复杂度就被优化到O(N)。首先需要具备的一个前置知识是前缀和,涉及到子串子序列的问题,通常可以通过双指针或者前缀和来解决,这题不能用双指针的原因是需要连续的非空序列,那么通过排序然后双指针靠拢的方案是行不通的,那么是否只能暴力呢,暴力的做法复杂度为O(子数组是数组中元素的连续非空序列。
2025-08-02 00:05:54
485
原创 leetcode hot 100——438.找到字符串中所有的字母异位词
用两个指针作为定长窗口的边界,截取子串的同时不断右移,然后用数组统计子串的各个字母数,通过判断两个数组是否相等来代替判断字符串是否相等。这样的做法可以通过,但是显然每一次的移动需要重新计算数组,效率非常低,leetcode喜提垫底。注意到每次窗口滑动时,产生变化的只有退出窗口和新进入窗口的两个字母需要维护,这样就可以随着窗口的移动,将时间复杂度优化到O(N)。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
2025-08-01 11:00:56
359
原创 leetcode hot100——3.无重复字符的最长子串
思路:这道题被力扣分类为滑动窗口,但个人认为与双指针的题目思路上没有太大的区别,如果读者有更为深刻的见解欢迎评论区指教。首先设置i,j两个指针,都位于序列开始的地方,获取指针处的字符,如果这个字符不在哈希表中,那么将该字符插入哈希表,j(右)指针前移。如果在哈希表中存在,则将i(左)指针指向的元素从哈希表中删除,然后右移,直到哈希表中找不到当前j指针指向的元素为止。因为无重复字符的最长子串是"abc",所以其长度为 3。因为无重复字符的最长子串是"b",所以其长度为 1。,请你找出其中不含有重复字符的。
2025-07-31 00:40:45
390
原创 leetcode hot 100——15.三数之和
这个思路比较容易想到,但是问题是两个输出要求,一个是不重复,另一个是不要求顺序,不要求顺序其实可以理解为我们可以指定一个方便我们解题的顺序,这样便有了去重的思路。我们指定输出顺序是将数字从小到大排列,因此枚举之前可以先对序列进行排列,在枚举时对i,j,k三个指针指向的数字进行去重,如果相邻的数字是一样的就跳过,这里代码书写上,有个比较简介的循环写法,具体请看代码。本题总体来说属于双指针问题,整体思路为从左到右遍历数组,从0遍历到n-1,选定某个数后,该数右边序列可以转化为较为经典的双指针问题。
2025-07-30 23:12:18
300
原创 leetcode hot 100 ACM模式——11.盛水最多的容器
采用双指针,一个放左边一个放右边,取两者之间比较矮小的墙壁(较小的数)向中间移动,直到两个指针靠拢为止。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2025-07-20 22:34:32
258
原创 leetcode hot 100 ACM模式——283.移动零
这题采用双指针,将一个指针指向已排序好的序列的末尾,另一个指针指向未排序好的序列头部,从头到尾排下去即可。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。,编写一个函数将所有。
2025-07-20 22:07:52
230
原创 leetcode hot 100 ACM模式——128.最长连续序列
解题思路:假设最长连续序列的第一个元素为x,那么在原数组中将无法找到x-1,否则矛盾,基于这个想法,可以想到用哈希来优化查找,有些哈希题使用unordered_map,这道题则用unordered_set,区别在与用map的不光需要查找某个元素,还需要获取与这个元素相关的信息,比如序列号等,这道题只需要查找,因此用unordered_set即可。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是 [1, 2, 3, 4]。请你设计并实现时间复杂度为。
2025-07-20 18:26:01
154
原创 leetcode hot 100 ACM模式——49.字母异位词分组
依旧使用哈希表,这个时候可以找到共同点,就是组成单词的字母是一样的,据此可以进行排序,将排序得到的字符串作为哈希表的键,字符串数组作为哈希表的值,并将原字符串插入到字符串数组后面,打印即可。给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
2025-07-20 15:54:15
332
原创 leetcode hot 100 ACM模式——1.两数之和
这道题使用哈希表可以使得查找效率很高,基于题目需求,我们可以将实际需要比较的数值作为哈希数组的键,方便查找,将数据在原数组中的索引作为对应的值,巧妙的一点是可以边查找边插入,因为差两数之和是相互的。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。
2025-07-20 10:45:19
409
原创 洛谷刷题c++题解3——打字练习
R 君在练习打字。有这样一个打字练习网站,给定一个范文和输入框,会根据你的输入计算准确率和打字速度。可以输入的字符有小写字母、空格和(英文句号),输入字符后,光标也会跟着移动。输入的文本有多行,R 君可以通过换行键来换行,换行后光标移动到下一行的开头。R 君也可以按退格键(为了方便,退格键用表示),以删除上一个打的字符,并将光标回移一格。特殊的,如果此时光标已经在一行的开头,则不能继续退格(即忽略此时输入的退格键)。需要注意的是,回车键不会被计入正确的字符个数。R 君看到网站上显示他花了T。
2025-07-01 09:17:31
473
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅