可变滑动窗口
题目示例:长度最小的子数组
java
class Solution {
public int minSubArrayLen(int target, int[] nums) {
if (nums.length == 0) {
return 0;
}
int result = nums.length + 1;
int i = 0;
int j = 0;
int total = 0;
while (j < nums.length) {
total += nums[j];
j++;
while (total >= target) {
result = Math.min(result, j - i);
total -= nums[i];
i++;
}
}
return result == nums.length + 1 ? 0 : result;
}
}核心思路
- 右指针
j不断向右扩大窗口。 - 当窗口内满足条件(
total >= target)时,左指针i开始向右收缩,尝试寻找最小长度。 - 持续更新最小结果。