【Leetcode】209. 长度最小的子数组 <滑动窗口,双指针算法>

发布于:2023-01-04 ⋅ 阅读:(371) ⋅ 点赞:(0)

题目描述 : 209. 长度最小的子数组

在这里插入图片描述

考察算法:滑动窗口、双指针

AC code:

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # 列表或者数组的长度
        length = len(nums)
        # 左指针和右指针
        left,right = 0,0
        # 求和用于和 target 进行比较
        sum = 0
        # 保留最短的长度,所以一开始取一个最大值
        res = 1e5 + 10
        # 用于标记是否有符合条件的连续子数组,如果没有,最后返回0
        flag = False
        # 外层循环,移动右指针
        while right < length:
            # 求和
            sum = sum + nums[right]
            # 当总数 >= target 的时候,移动左指针
            # (也是滑动窗口算法比较关键的地方:找到移动左指针的条件) 
            while sum >= target:
                # 取一个长度的最小值
                res = min(res,right-left + 1)
                # 标记为 True,说明已经至少找到一个符合条件的连续子数组 
                flag = True
                # 移动左指针之前需要先把之前的 value 去除,才算是真正的移动
                sum = sum - nums[left]
                # 移动左指针
                left += 1
            # 移动右指针
            right += 1
        if flag == False:
            res = 0
        return res

滑动窗口模版:https://blog.csdn.net/weixin_44414948/article/details/113862173


网站公告

今日签到

点亮在社区的每一天
去签到