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; }