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.
Solution:
use two pointers, scan array from start to end, if subsum >=s , start++, if subsum<s end++.
compare min result.
public int minSubArrayLen(int s, int[] nums) {
int start = 0;
int end = 0;
int result = Integer.MAX_VALUE;
if(nums.length <=0) return 0;
int count = 0;
while(end< nums.length && start<=end) {
count+=nums[end];
while(count>=s) {
result = Math.min(result, end-start+1);
count -=nums[start];
start++;
}
end++;
}
return (result == Integer.MAX_VALUE) ? 0 :result;
}