给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
示例:
输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3]
是该条件下的长度最小的连续子数组。
双指针法解决,先从零开始累加sum,先保证sum >= s ,再确定这其中是否有连续和为s的子数组,这样的话就需要low指针向前逐步夹逼,同时更新子数组长度min。
综述:
每次都是在处理[0,high]的子数组,同时每次判断sum>=s的情况下,low向前夹逼。
class Solution {
public int minSubArrayLen(int s, int[] nums) {
int low=0;
int min=Integer.MAX_VALUE;
int sum=0;
for (int high = 0; high < nums.length; high++) {
sum+=nums[high];
while(sum>=s){
min=Math.min(min, high-low+1);
sum-=nums[low++];
}
}
return (min!=Integer.MAX_VALUE)? min:0;
}
}