LeetCode 209:长度最小的子数组 python(滑动窗口)

这个题目卡了我好几天,脑袋里面有思路,但是手笨不会写,然后就犯懒拖了好久。今天周末,熬夜我也要结束掉它!

一、题目
在这里插入图片描述
题目未截全,如有需要,详见 https://leetcode-cn.com/problems/minimum-size-subarray-sum/

二、解析

这个题目研究这么久必然是要用大名鼎鼎的滑动窗口,先总结下滑动窗口公式:

不满足条件的时候右边界延申;满足条件的时候左边界收缩。掌握这条公式!!!

  1. 使用4个index:

    left,right 来标记左右边界,按照之前说法:使用左开右闭区间,这样可以覆盖场景全面

    sum 记录子数组的长度,和 target 对比

    flag 标记满足条件的数组长度!长度!!

  2. 套用滑动窗口的公式

    第一层用 for 循环:不满足条件,右边界延申:if sum < target : right++

    第二层用 while 循环:满足条件时,左边界收缩:if sum >=target : left++

  3. 返回值flag取值,取长度

    flag 要取所有满足条件中的最小值,初始设置 len(nums)+1,此处使用一个内置函数,min(flag,right-left+1),因为是长度,所以记得 flag=right-left+1

三、编码

class Solution:
    def minSubArrayLen(self, target: int, nums: list[int]) -> int:
        left,right = 0,0
        sum = 0
        flag = len(nums)+1
        for right in range(len(nums)) :
            sum += nums[right]
            if sum >= target:
                while sum >= target:
                    flag = min(flag,right-left+1)
                    sum -= nums[left]
                    left += 1
                right += 1
            else:
                right += 1
        if flag == len(nums)+1:
            return 0
        else:
            return flag

四、执行结果

今天截图及时,有执行结果的截图,记录一下
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值