Question:
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:
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
return solveN(s, nums);
}
private int solveN(int s, int[] nums) {
int start = 0, end = 0, sum = 0, minLen = Integer.MAX_VALUE;
int n=nums.length;
while(end<=n-1)
{
while(end<=n-1&&sum<s) sum+=nums[end++];
if(sum<s) break;
while(start<end&&sum>=s) sum-=nums[start++];
if(end-start+1<minLen) minLen=end-start+1;
}
return minLen == Integer.MAX_VALUE ? 0 : minLen;
}
}
O(NLONGN)的解法还没看懂