Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.
For example, given the array [2,3,1,2,4,3]
and s
= 7
,
the subarray [4,3]
has the minimal length under the problem constraint.
下面举一个例子
2 3 1 2 4 3
i =0 ,j=0; minlen=Integer.Max_Value
i=0,j=3;minlen=4;
i=1 ,j=3;minlen=4;
i=1,j=4;minlen=4;
i=3,j=4;minlen=3;
i=3;j=5;,minlen=3;
所以minlen=3;
代码如下(已通过leetcode)
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
if(nums==null ||nums.length==0) return 0;
int i=0,j=0;
int sum=nums[0];
int minlen=Integer.MAX_VALUE;
while(i<nums.length&&j<nums.length) {
if(sum<s) {
j++;
if(j>=nums.length) break;
else sum=sum+nums[j];
}
else{
minlen=Math.min(minlen, j-i+1);
//System.out.println(minlen);
sum=sum-nums[i];
i++;
}
}
if(minlen==Integer.MAX_VALUE) return 0;
else return minlen;
}
}
public int minSubArrayLen(int s, int[] nums) {
if(nums==null ||nums.length==0) return 0;
int i=0,j=0;
int sum=nums[0];
int minlen=Integer.MAX_VALUE;
while(i<nums.length&&j<nums.length) {
if(sum<s) {
j++;
if(j>=nums.length) break;
else sum=sum+nums[j];
}
else{
minlen=Math.min(minlen, j-i+1);
//System.out.println(minlen);
sum=sum-nums[i];
i++;
}
}
if(minlen==Integer.MAX_VALUE) return 0;
else return minlen;
}
}