2025/11/12

滑动窗口的核心是通过维护一个动态调整的 “窗口”(连续子区间),用 O (n) 时间复杂度替代暴力枚举的 O (n²),避免重复计算。
其核心逻辑是用左右指针界定窗口范围,根据问题条件移动指针收缩或扩展窗口,同时实时更新窗口内的关键信息,最终找到满足条件的最优解或所有解。
常见应用场景包括求最长无重复子串、最小覆盖子串、长度固定的子数组最大和等,核心优势是高效利用已有计算结果,减少冗余操作,是处理线性数据连续子问题的核心技巧之一。

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

define MAXN 100001

class Solution {
public:
int minSubArrayLen(int target, vector& nums) {
int i = 0;
int sum = 0;
int result = MAXN;
int subL = 0;
for (int j = 0; j < nums.size(); j++) {
sum += nums[j];
while (sum >= target) {
subL = j - i + 1;
result = min(result, subL);
sum = sum - nums[i];
i++;
}
}
return result == MAXN ? 0 : result;
}
};

posted on 2025-11-12 17:44  才一斤  阅读(0)  评论(0)    收藏  举报

导航