力扣数组基础之双指针长度最小的子数组
题目:给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例
1 | 输入:target = 7, nums = [2,3,1,2,4,3] |
思路
滑动窗口问题主要确定以下三点:
- 窗口内是什么?
- 如何移动窗口的起始位置?
- 如何移动窗口的结束位置?
本题中,窗口就是满足与其和≥s的长度最小的连续子数组。
窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。
窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,窗口的起始位置设置为数组的起始位置就可以了。

滑动窗口的精髓就是根据当前子序列和大小的情况,不断调节子序列的起始位置,从而降低复杂度到O(n).
代码
1 | func min(a, b int) int { |