题目描述
在一个正整数数组 nums
中找到最小长度的连续子数组,使子数组元素之和大于或等于 s
,返回满足条件的连续子数组的最小长度,如果没有找到则返回0。
例子
输入:s = 12, nums = [4, 6, 2, 4, 9, 8, 7]
输出:2
代码
def minsubarray(s, nums):
res = float("inf") # 定义一个无穷小的数,记录返回值
sum_subarray = 0 # 子序列和
index = 0 # 子序列起始下标
for i in range(len(nums)):
sum_subarray += nums[i]
while sum_subarray >= s:
res = min(res, i-index+1) # 是否要更新子序列的长度
sum_subarray -= nums[index] # 起始位置 往右移一个
index += 1
return 0 if res == float("inf") else res
if __name__ == "__main__":
s = 12
nums = [4, 6, 2, 4, 9, 8, 7]
result = minsubarray(s, nums)
print(result)