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.
Java:
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
if(nums.length == 0) return 0;
int right = -1;
int left = 0;
int max = 0;
int minlength = nums.length +1;
for(int i=0;i<nums.length;i++)
{
if(nums[i] >= s) return 1;
else if(max + nums[i] >=s)
{
right++;
minlength = Math.min(minlength, right - left);
max += nums[i];
while(max-nums[left] >= s && left<right)
{
max -=nums[left];
left++;
minlength = Math.min(minlength, right - left);
}
}
else
{
max += nums[i];
right++;
}
}
return minlength >nums.length ? 0:minlength+1;
}
}