再次重启算法训练第二天|209.长度最小的子数组

因为对第一次刷题还有一些记忆,依稀记得是滑动窗口...但是忘记如何实现,于是就按自己的暴力思路写了一遍,一度卡在该如何执行循环上,最后写出来发现测试用例过了,但是提交后会有3个用例超时,代码如下:

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # nums = nums.sort()
        left, res, round, size = 0, 0, 0, len(nums)
        
        for round in range(size):
            for right in range(round, size):
                res += sum(nums[left: right+1])
                # print("start sum is:" + str(res))
                if left !=0 and right == size - 1:
                    if res < target:
                        left = 0
                        res = 0
                    else:
                        # print("end sum is:" + str(res))
                        return right - left + 1
                else:
                    if res < target:
                        left += 1
                        res = 0
                    else:
                        return right - left + 1

        return 0


 之后又回顾了一次代码随想录的讲解!再次记忆深刻了!

Solving tips:最重要的就是知道如何在多退少补的过程中记录满足条件的最短子序列!!!

也就是要使用“最小长度=min(上轮最小长度,当前长度)”,并且这个操作是在“多退”的情况实现的,给LZ记住!!!!

好的,那么代码呢,如下:

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

        slow, res, fast, subLen, size = 0, 0, 0, float('inf'), len(nums)
        
        while fast < size:
            # fast只顾往前走(为“少补”的情况)
            res += nums[fast]

            # 只有“多退”时,才考虑向前移动slow,并使得和进行相应的减小
            while res >= target:
                subLen = min(subLen, fast - slow + 1) # 比较并记录最小子序列
                res -= nums[slow]
                slow += 1
            
            fast += 1

        return subLen if subLen != float('inf') else 0 # 根据循环结果判断输出

今天的学习任务结束!家人们真的会温故而知新!!并且写笔记真的有用,我看教程看不懂,但是看我上次的笔记反而就能看懂。。。还得是我 ^_^ ~yeah!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值