- 题目
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
- 示例
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
- 算法
随着i变大,j的取值是单调的,不用每次从0开始。
- 代码
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left = 0;
int sum = 0;
int res = Integer.MAX_VALUE;
for (int right = 0; right < nums.length; right++) {
sum += nums[right];
while (sum >= target) {
res = Math.min(right-left+1, res);
sum -= nums[left++];
}
}
return res==Integer.MAX_VALUE?0:res;
}
}