LeetCode刷题——209. 长度最小的子数组

题目

LeetCode刷题——209. 长度最小的子数组

思路

可以利用滑动窗口的思路来解决此问题,即就像一个滑动的窗口,套在一个序列中,左右的滑动,根据窗口内的子序列进行判断。
本题先固定数字左端元素,然后右端元素不断右移,直到该子数组满足题意。然后将左端元素右移一个位置,继续此过程。

代码

class Solution(object):
    def minSubArrayLen(self, target, nums):
        """
        :type target: int
        :type nums: List[int]
        :rtype: int
        """
        size = len(nums)
        l,r = 0,-1 # 子数组[l,r]

        min_length = size+1
        sum_ = 0 # 保存当前子数组总和

        while l < size:
            # 如果当前sum_小于target
            # 则将右端右移
            if sum_ < target and r+1< size:
                r += 1
                sum_ += nums[r]
            else:
                # 否则 将左端右移一位
                sum_ -= nums[l]
                l += 1

            # 判断当前sum_是否满足条件
            if sum_ >= target and r-l+1 < min_length:
                min_length = r - l + 1

        return min_length if min_length != size+1 else 0

LeetCode刷题——209. 长度最小的子数组

上一篇:python – PyCUDA:设备代码中的Pow尝试使用std :: pow,失败


下一篇:209. 长度最小的子数组