Leetcode热题100
Leetcode热题100
UGOTNOSHOT
这个作者很懒,什么都没留下…
展开
-
Problem: 53. 最大子数组和
考虑动态规划,把问题分解为小的子问题,在这个问题中我们把子问题dp[i]定义为以nums[i]结尾的连续子数组的最大值。以测试用例1为例,现在nums=[-2,1,-3,4,-1,2,1,-5,4],则初始值dp[0]=-2,dp[1]=-2+1=-1,dp[2]=-2+1=-1……,注意对于每个时刻的dp[i],有。时间复杂度:O(n)空间复杂度:O(n)原创 2024-05-27 14:59:15 · 132 阅读 · 0 评论 -
Problem: 42.接雨水
这个问题可以这样模拟:我们每一格能盛放的水的容量其实取决于这一格的左边的单位高度和右边的单位高度,拿第三个格举例,左边的单位高度为1,右边的单位高度为2,同时这一格是没有黑色柱子的,所以这一格能存储的容量就是min(左边高度—右边高度)— 黑色柱子的高度!两个循环遍历记录下当前位置左边的单位高度的最大值pre_max以及当前位置右边的单位高度最大值suf_max,问题的解就等于每一格的min(pre_max,suf_max)减去当前格子的黑色柱子的高度。时间复杂度:O(n)空间复杂度:O(n)原创 2024-05-21 21:01:38 · 185 阅读 · 0 评论 -
Problem: 15.三数之和
先对数组进行排序,然后固定一个数nums[k],然后再用两个指针分别指向k+1,len(nums)-1,在循环过程中要注意去除重复元素。另外还有一个隐藏的终止循环条件,即如果此时nums[k]>0,那么直接break。三重循环后再去重,但是时间复杂度会达到O(n3),提交后无法通过测试用例。犹豫不决先排序,步步逼近双指针。原创 2024-05-19 18:57:41 · 95 阅读 · 0 评论 -
Problem: 11. 盛最多水的容器
典型的双指针问题,一开始i指向数组最左端,j指向最右端,循环条件当i<j时,求取此时的面积,并放入一个列表中存储,然后比较此时的height[i]与height[j]哪个更大,如果height[i]更大,那么指针j左移,反之,指针i右移。最终返回列表中最大的面积,完美解决!原创 2024-05-14 21:37:04 · 188 阅读 · 0 评论 -
Problem: 128. 最长连续序列
首先用set去除重复元素,因为重复元素并不影响最长连续序列的长度。然后定义两个列表,一个用来记录当前的最长连续序列,一个用来记录每个最长连续序列的长度。在循环里面用条件判断当前数字能否维持之前的最长连续序列即可,要注意的是下标越界以及整个序列就是最长连续序列的问题。原创 2024-05-13 19:07:42 · 182 阅读 · 0 评论 -
Problem: 49. 字母异位词分组
这题耗费了很多时间,一开始想的是从头开始遍历列表中的每个字符串,然后创建一个列表str_each_list来记录每一个字符串的字母,接着第二遍遍历列表,判断后续字符串的长度是否等于str_each_list的长度且str_each_list是否in后续字符串,如果是,则表明是字母异位词。最终我还是选择了官方解法,官方解法的思路是先创建一个value为字典的列表,然后将每个乱序后的字符串作为key,再把字符串加入到列表里,可以这么做的原因是因为字母异位词经过sorted后是一样的。原创 2024-05-13 17:13:47 · 232 阅读 · 0 评论