Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous 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.
solution1:
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int n = nums.size();
int minlen = INT_MAX;
int sum = 0;
int start = 0;
for(int i=0; i<n; i++)
{
sum += nums[i];
while(sum>=s)
{
minlen = min(minlen,i-start+1);
sum -= nums[start++];
}
}
return minlen == INT_MAX ? 0 : minlen;
}
};
solution2:
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int n = nums.size();
int minlen = INT_MAX;
int sum = 0;
int left = 0;
int right = 0;
while(right<n)
{
do{
sum+=nums[right++];
}while(right<n&&sum<s);
while(left<right&&sum-nums[left]>=s)
{
sum -= nums[left++];
}
if (sum >= s)
minlen = min(minlen, right-left);
}
return minlen == INT_MAX ? 0 : minlen;
}
};