滑动窗口算法
滑动窗口是一种常用的双指针技巧,通过维护一个动态区间来解决子数组或子串问题。相比暴力解法,它能有效降低时间复杂度。
长度最小的子数组

题目解析:给定一个正整数数组和一个目标值,寻找和大于等于目标值的最短连续子数组长度,不存在则返回 0。
算法原理:
- 暴力解法:双重循环遍历所有情况,效率低。
- 滑动窗口:使用 left 和 right 两个同向指针。right 向右扩展窗口累加 sum,当 sum >= target 时更新最小长度,然后移动 left 缩小窗口直到 sum < target。

class Solution {
public int minSubArrayLen(int target, int[] nums) {
int sum = 0;
int len = Integer.MAX_VALUE;
int n = nums.length;
for (int left = 0, right = 0; right < n; right++) {
sum += nums[right]; // 入窗口
while (sum >= target) {
len = Math.min(len, right - left + 1); // 结果更新
sum -= nums[left++]; // 出窗口
}
}
len == Integer.MAX_VALUE ? : len;
}
}










