Skip to content

Latest commit

 

History

History
37 lines (32 loc) · 1.53 KB

209.md

File metadata and controls

37 lines (32 loc) · 1.53 KB

209. Minimum Size Subarray Sum

给定一个包含n个正整数的数组和一个正整数s,找出其满足和sum ≥ s的子数组的最小长度。如果不存在这样的子数组,返回0

例如,给定数组 [2,3,1,2,4,3]与s = 7, 子数组[4,3]具有满足题设条件的最小长度。

class Solution(object):
    def minSubArrayLen(self, s, nums):
        """
        :type s: int
        :type nums: List[int]
        :rtype: int
        """
        # 7 star, 没能掌握,必须熟练掌握
        # 双指针,滑动窗口法
        # 双指针法,右指针不断往右遍历,如果左指针和右指针构成的子数组的和大于等于s了,左指针也开始往右遍历,意图寻找
        # 以右指针结尾且和大于等于s的子数组的最小长度,找到当前的最小长度左指针往前移动一步,右指针也继续往前直到和左指针构成的数组的和再次大于等于s,
        # 这时左指针又可以往前了,直到找到当前右指针为结尾的最小长度的子数组,一直这样重复,直到右指针到达数组的最右边
        if sum(nums) < s:
            return 0
        _min = 0xffffffff
        left, right = 0, 1
        cur = nums[0]
        while right < len(nums):
            while cur < s and right < len(nums):
                cur += nums[right]
                right += 1

            while cur >= s and left < right:
                cur -= nums[left]
                left += 1
            _min = min(_min, right - left + 1)
        return _min