文章目录
- 1.题目要求
- 2.解题代码
1.题目要求
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的连续子数组。
2.解题代码
定义两个指针 start 和 end 分别表示子数组的开始位置和结束位置,维护变量sum 存储子数组中的元素和(即从 nums[start] 到 nums[end] 的元素和)。
初始状态下,start 和 end 都指向下标 0,sum 的值为 0。
每一轮迭代,将nums[end] 加到sum,如果sum≥s,则更新子数组的最小长度(此时子数组的长度是end−start+1),然后将nums[start] 从sum 中减去并将start 右移,直到sum<s,在此过程中同样更新子数组的最小长度。在每一轮迭代的最后,将end 右移。
class Solution:def minSubArrayLen(self, s: int, nums: List[int]) -> int:# 双指针# 如果数组为0,则返回0if not nums:return 0# 初始化参数n = len(nums)ans = n+1start, end = 0, 0total = 0while end < n:total += nums[end]while total >= s:ans = min(ans, end - start + 1)total -= nums[start]start += 1end += 1return 0 if ans == n+1 else ans