209. 长度最小的子数组
问题209 长度最小的子数组 ★★☆☆☆
https://leetcode-cn.com/problems/minimum-size-subarray-sum/
这个题目可以算是比较典型的滑动窗口题目了,滑动窗口的解法理解起来并不难,循环不变量是,每次循环先右指针向右扩大窗口,持续扩大直到当前窗口内元素之和大于等于target,然后开始左指针向右缩小窗口,持续缩小直到当前窗口内元素之和小于target。在这个过程中,及时更新满足条件的最小子数组长度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int minSubArrayLen(int target, int[] nums) {
int min = Integer.MAX_VALUE;
int left = 0, right = 0;
int sum = 0;
while (right < nums.length) {
sum += nums[right];
while (sum >= target) {
min = Math.min(min, right - left + 1);
sum -= nums[left];
left++;
}
right++;
}
return min == Integer.MAX_VALUE ? 0 : min;
}
本文由作者按照 CC BY 4.0 进行授权