长度最小的子数组
题目: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
解题思路: 维护一个左指针, 一个右指针, 右指针不断移动直到和 >= s后再缩小左指针的范围, 并不断更新最小子数组长度
class Solution {
public int minSubArrayLen(int s, int[] nums) {
if(nums.length == 0) return 0;
int ans = Integer.MAX_VALUE;
int sum = 0;
int l = 0;
for(int i = 0; i < nums.length; i++) {
sum += nums[i];
while(sum >= s) {
ans = Math.min(ans, (i - l + 1));
sum -= nums[l++];
}
}
return ans == Integer.MAX_VALUE ? 0 : ans;
}
}