资源引用:
leetcode题目:
209.长度最小的子数组209. 长度最小的子数组 - 力扣(LeetCode)
58.螺旋矩阵Ⅱ59. 螺旋矩阵 II - 力扣(LeetCode)
卡玛网题目:
58.区间和58. 区间和(第九期模拟笔试) (kamacoder.com)
44.开发商购买土地44. 开发商购买土地(第五期模拟笔试) (kamacoder.com)
开篇碎碎念:
10.31日因为赶ddl的原因,day2的训练营拖了1天才发布,今天4道算法题全部独立完成共花费4小时,虽然独立完成多道中等题很有成就感,但终究是效率低了一点。究其原因是代码习惯不好,即便有正确的思路,却没有相匹配的实现能力,导致解题较慢,希望在接下来的几天中多多通过debug提高效率,长此以往形成良好的代码习惯,加油!
209.长度最小的子数组
题目分析:给定的数组含有n个正整数和给定一个正整数target。由于要在该数组中找子数组作为返回条件,故不可对该子数组进行排序。如果不存在符合条件的子数组需返回0,这是需要先判断的?也就是要找到第一组满足条件的数组(总和大于等于target,考虑遍历数组一次)
根据题目提示,考虑使用双指针left和right解决问题。
第一种解题思路:
从头到尾遍历,直至找到第一个left=0,right=i的长度length为i+1的数组总和≥target
此时right先动则必然增大,left先动必然<target,故开始平移
此时先动right必然增大,在循环中应该先尝试left++
开始循环,直至right=n-1或length=1(left++循环的边界条件已经保证):
开始循环,循环条件为sum>=target
尝试left++,即sum-=nums[left]
若sum仍≥target,则更新left,sum和length
若否,则退出对left++尝试的循环
右平移1位
循环结束后,right已经达到边界值,此时left还有缩小尝试的空间,
故重复对left++尝试的循环,直至不满足sum>=target
时间复杂度分析:第一个循环将数组遍历1次,第二个循环right从初始值遍历至边界也是O(n),第三次循环left最多从当前值遍历至边界。综上,时间复杂度为O(n)。
反思:
没有正确把握left的移动:

最低0.47元/天 解锁文章
1394

被折叠的 条评论
为什么被折叠?



