文章

滑动窗口

用变量标记窗口的右区间,右区间每次向右挪动一位,验证左区间能否缩小,如果可以就缩小,然后记录此时的长度,维护一个最小长度变量就可以了

· 更新于 2026/3/13 · 2 分钟阅读

用变量标记窗口的右区间,右区间每次向右挪动一位,验证左区间能否缩小,如果可以就缩小,然后记录此时的长度,维护一个最小长度变量就可以了。

具体见题目

Leetcode.209

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,…, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

==滑动窗口==解决这个问题。

相比一下就能想出来的暴力解法,滑动窗口法精髓实质上是利用了以前的计算所计算出来的和,在基础上直接加减,从而降低复杂度。

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int first = 0,last =0,total = 0;
        int min = 999999999;
        for (; last<nums.size(); last++) {
            total+=nums[last];
            while (total-nums[first]>=target) {
                total-=nums[first];
                first++;
            }
            if (total >= target) {
                min = min<=(last-first+1)?min:(last-first+1);
            }
        }
        return min==999999999?0:min;
    }
};

相关文章

二分查找

在递增或者递减的一列数中,依次用目前区间最中间的数跟target比较,根据比较结果更新区间,再循环这个过程,知道找到最中间数=target或区间长度为0为止