代码随想录训练营第二天|209.长度最小的子数组、58.螺旋矩阵Ⅱ、[卡玛网]58.区间和、[卡玛网]44.开发商购买土地

资源引用:

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的移动:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值