1. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
题解:
start、end 两个指针同向移动,[start: end] 窗口中的元素和是否大于 target,若大于则缩小窗口范围 (start 向前移动)循环判断是否大于等于 target
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n = len(nums)
start, end = 0, 0
res = n + 1
total = 0
while end < n:
total += nums[end]
while total >= target:
res = min(res, end - start + 1)
total -= nums[start]
start += 1
end += 1 # 窗口右边指针向后移动
return 0 if res == n + 1 else res
参考:长度最小的子数组
给定一个数组和一个目标值,使用滑动窗口的方法找到数组中和大于等于目标值的最小子数组的长度。通过两个指针start和end,动态调整窗口大小,确保窗口内元素和始终大于等于目标值,更新最小长度。

515

被折叠的 条评论
为什么被折叠?



