📅  最后修改于: 2023-12-03 15:12:03.100000             🧑  作者: Mango
给定一个包含 n 个整数的数组,找到每个元素的最小子数组,使得该子数组的和大于等于给定目标数 num。如果不存在符合条件的子数组,则返回 0。
遍历数组,从当前位置开始,记录当前子数组的和,直到子数组的和大于等于目标数 num,记录该子数组的长度,并更新最小长度 min_len,继续遍历直到数组末尾。如果不存在符合条件的子数组,则返回 0。
def min_subarray_len(nums: List[int], target: int) -> int:
n = len(nums)
res = float('inf')
left = 0
cur_sum = 0
for i in range(n):
cur_sum += nums[i]
while cur_sum >= target:
res = min(res, i - left + 1)
cur_sum -= nums[left]
left += 1
return res if res != float('inf') else 0
nums = [2, 3, 1, 2, 4, 3]
target = 7
print(min_subarray_len(nums, target)) # 2