LeetCode
记录LeetCode学习计划刷题思路及好题分享
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 评论 -
Problem: 1572. 矩阵对角线元素的和
因为是正方形矩阵,所以len(mat) == len(mat[0]),用这个作为循环条件,把所有元素加起来,如果len(mat)%2 == 1,那么就再把对角线相交的那个点的值再减一遍即可。把前几种矩阵对角线元素相加的情况列举一下,方可发现主对角线与副对角线元素下标的规律。时间复杂度: O(n)原创 2024-05-10 19:20:14 · 140 阅读 · 0 评论 -
Problem: 1672. 最富有客户的资产总量
其实就是对列表中的每一个列表中的数字求和,统计出每位客户的资产总额,再求出一个最大值,即为问题答案。先定义一个列表accounts_each,把每一个客户的资产总量添加到里面,再返回最大值。时间复杂度:O(n)原创 2024-05-10 19:15:20 · 112 阅读 · 0 评论 -
Problem: 13. 罗马数字转整数
从后往前用while循环处理罗马数字字符串,当遇到成对的特殊罗马数字时,便进行相应的特殊处理,并让index-=2。对于每一个ifelse里面的处理都把结果添加到final_num中,最后返回final_num。好久没有做过题,记得之前有接触到这一题,也是罗马数字转阿拉伯数字,不过要比这题简单。看了官方给的提示后逐渐有了思路,应该先用字典建立一个罗马数字与阿拉伯数字的映射,再从后往前处理这个罗马数字字符串。原创 2024-05-10 19:11:58 · 142 阅读 · 0 评论 -
Problem: 1523. 在区间范围内统计奇数数目
正常人想法,循环遍历,统计奇数个数,提交发现超时。看提示后惊觉可以总结规律,分为两种情况讨论。原创 2024-05-10 18:59:11 · 101 阅读 · 0 评论 -
Problem: 73. 矩阵置零
一开始看到后并没有任何思路,随便看了下提示便开始写,没想到一次就通过了。空间复杂度: 在我看来是O(1),但是不太确定。时间复杂度: O(n²)见代码,非常容易理解。原创 2024-05-10 18:31:31 · 126 阅读 · 0 评论 -
Problem: 67. 二进制求和
先创建一个列表用来存储我们的相加结果,然后按情况分别讨论,分别是两位都是1且进位也是1,两位都是1,以及其它情况。当两个字符串都遍历完后,分别检查a或b是否还有剩余的数字,再分别进行相应的处理。最终把列表逆置一下,因为它存储的是相加后每位从后往前的结果。既然是二进制求和,则可用二进制求和手算的方法模拟,并用代码实现,即对a和b两个二进制数,从末位开始相加,如遇到两个数字相加大于1,则有进位,下一位相加时就需考虑进位,若两个数字相加小于等于1,则无进位,继续按照从右往左的顺序逐位相加即可。原创 2024-05-10 18:51:43 · 191 阅读 · 0 评论