1. 程式人生 > >**209. Minimum Size Subarray Sum 長度最小的子數組

**209. Minimum Size Subarray Sum 長度最小的子數組

連續子數組 mini 存在 ins else 越界 雙指針 ray nim

1. 題目描述

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

示例:

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

2. 思路

雙指針法。i和j指針分別是連續數組的兩端。如果這個數組的值大於等於s則左指針+1,否則右指針+1。

3. 解法

 1 class Solution:
 2     def minSubArrayLen(self, s: int, nums) -> int:
3 if sum(nums)<s:return 0 # 如果所有數的和都比s小,那就說明無解 4 i,j=0,-1 # 左右指針,因為我們取左閉又閉區間,所以j初始為-1 5 res = len(nums) # 初始結果為所有數組的長度 6 sums = 0 # 子數組的和 7 8 while(i<len(nums)): 9 if (j+1)<len(nums)and(sums<s): # 註意下面有nums[j+1],所以要加入越界判斷
10 j+=1 11 sums+=nums[j] 12 else: # 和已經大於s了,那麽就將i右移下 13 sums-=nums[i] 14 i+=1 15 if sums>=s: # 比較看看是否有更好的解 16 res = min(res,j-i+1)
17 return res




**209. Minimum Size Subarray Sum 長度最小的子數組