长度最小的子数组
题目:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
思路:设立左、右两个指针,然后开始移动右指针,当目前窗口的总和 >= target,开始移动左指针,并记录左指针移动过程中,满足条件的最小值,并更新目前窗口总和。
代码:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int l = 0, sum = 0, min = Integer.MAX_VALUE;
for(int r = 0; r < nums.length; r++) {
sum += nums[r];
while(sum >= target) {
min = Math.min(min, r - l + 1);
sum -= nums[l++];
}
}
return min == Integer.MAX_VALUE? 0 : min;
}
}