📌  相关文章
📜  给定Array中总和大于或等于K的最小子数组(1)

📅  最后修改于: 2023-12-03 15:11:39.181000             🧑  作者: Mango

求给定Array中总和大于或等于K的最小子数组

问题描述

给定一个正整数数组和一个正整数K,找到一个最小的连续子数组,使得大于或等于这个子数组的总和达到K。如果没有满足条件的子数组,则返回空数组。

示例

输入: nums = [2,3,1,2,4,3], K = 7

输出: [4,3]

解题思路

1.使用双指针(left, right)维护子数组 2.right指针不断向右移动,直至子数组和大于等于K 3.此时记录下子数组长度和 4.让left指针向右移,缩小子数组,每移动一次,更新长度和 5.重复2-4步骤,直至right指针到达数组末尾

代码实现
def minSubArrayLen(nums: List[int], k: int) -> int:
    left, sum_num, res = 0, 0, float('inf')
    for right in range(len(nums)):
        sum_num += nums[right]
        while sum_num >= k:
            res = min(res, right - left + 1)
            sum_num -= nums[left]
            left += 1
    return res if res != float('inf') else 0

返回的是子数组长度,时间复杂度为O(n)