leetcode —— 209. 長度最小的子數組

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

示例:

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
————————————

# Python3
class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        length = len(nums)  
        ans = float('inf') # 用於保存長度最小的連續子數組長度
        left = 0  # 初始化長度最小的連續子數組的初始值
        sums = 0  # 初始化長度最小的連續子數組的累加和
        for i in range(length):
            sums += nums[i]  # 前i個值的累加和
            while sums >= s:  # 當前i個值的累加和大於s時
                ans = min(ans,i-left+1)  # 計算當前連續子數組的最小長度
                sums -= nums[left]  # 更新最小長度的子數組的累加和
                left += 1  # 更新最小長度的連續子數組的起始位置
        return ans if ans != float('inf') else 0  # 判斷是否有特殊情況,特殊情況返回0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章