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