📅  最后修改于: 2023-12-03 15:11:39.181000             🧑  作者: Mango
给定一个正整数数组和一个正整数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)