LeetCode 209. 長度最小的子數組(Python)

給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。

示例: 

輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組。

 

思路:滑動窗口,左端點 l 和右端點 r,如果 l 到 r 位置之間的數和大於s則左端點向右移動一位,反之右端點向右移動一位,並記錄窗口中數字和大於s時的最小長度。

class Solution(object):
    def minSubArrayLen(self, s, nums):
        """
        :type s: int
        :type nums: List[int]
        :rtype: int
        """
        # 滑動窗口
        l = 0
        r = -1
        cur_sum = 0
        result = len(nums) + 1
        while l < len(nums):
            if cur_sum < s and (r + 1) < len(nums):
                r = r + 1
                cur_sum = cur_sum + nums[r]
            else:
                cur_sum = cur_sum - nums[l]
                l = l + 1
            
            if cur_sum >= s:
                result = min(result, r - l + 1)
            
        if result == len(nums) + 1:
            return 0 
        
        return result
                

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章