滑动窗口模板 leetcode 209题

 
 
"""
给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

"""

def minSubArrayLen(target,nums):
    n = len(nums)
    left = 0 #左指针
    right = 0#右指针
    result = 0#当前结果
    bestresult = 0# 最后的结果
    if n == 0:
        return 0
    while (right < n):# 右指针小于数组的长度
        result = result + nums[right] # 更新当前结果
        while (result >= target):#当当前结果比target 要大的时候,缩小窗口, 左指针右移
            if (right-left+1 < bestresult) or bestresult==0:# 更新结果
                bestresult = right - left +1
            result = result - nums[left]#移除左指针对应的元素, 所以窗口
            left = left +1
        right = right +1#右指针右移
    return bestresult
print(minSubArrayLen(7,[2,3,1,2,4,3]))

 

posted @ 2023-02-19 22:15  朵朵奇fa  阅读(9)  评论(0编辑  收藏  举报