滑动窗口
要区分最小和最大滑窗,内层while循环的条件和更新结果的地方
核心:
关键的区别在于,最大滑窗是在迭代右移右边界的过程中更新结果,而最小滑窗是在迭代右移左边界的过程中更新结果。
最小滑窗
给定数组 nums,定义滑窗的左右边界 i, j,求满足某个条件的滑窗的最小长度。
while j < len(nums)://这个while也可用fori代替
判断[i, j]是否满足条件
while 满足条件:
不断更新结果(注意在while内更新!)
i += 1 (最大程度的压缩i,使得滑窗尽可能的小)
j += 1
L209长度最小的子数组
-
题目:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
提示:
- 1 <= target <= 10^9
- 1 <= nums.length <= 10^5
- 1 <= nums[i] <= 10^5
-

-
class Solution { // 滑动窗口 public int minSubArrayLen(int s, int[] nums) { int left = 0; int sum = 0

本文探讨了滑动窗口算法在求解数组中满足特定条件的最小和最大长度子数组问题的应用。最小滑窗问题在于迭代右移左边界时更新结果,如L209题目中寻找和大于指定值的最短连续子数组。最大滑窗问题则在右移右边界过程中更新结果,如L904题目中收集最多两种水果的最大数量。总结中强调了不同条件下的滑动窗口压缩策略。
最低0.47元/天 解锁文章
988





