Skip to content

滑动窗口题目

长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

滑动窗口的题目真的挺灵活的,之前一直以为滑动窗口就是左指针在数组最左边,右指针在最右边,但是其实滑动窗口可以是都在一侧的指针,先移动第一个指针,达成题目条件,再移动另外的指针

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left = 0
        sums = 0
        result = float(inf)
        for j in range(len(nums)):
            sums += nums[j]
            while (sums >= target):
                result = min(result,j - left + 1)
                sums -= nums[left]
                left += 1
        if result == float(inf):
            return 0

        return result