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.
中心思想:
subarray--> 数字是连续的
用两个指针left和right,起始指在数组开头。
当指针指的位置都没有超过数组长度时,将right指向的数都加到sum并不断右移,直到sum >= s。注意这里要加上right<n的条件,否则进行到下一个while时right可能会超出n的长度。
当sum >= s时,记录下当前最小subarray长度。然后sum减去left指针所指的数,并且left右移,直到sum再次小于s。
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
<span style="white-space:pre"> </span>int n = nums.size();
if (n==0)
return 0;
int left = 0, right = 0, sum = 0, minimum = n+1;
while(left < n && right < n){
while (sum < s && right < n){
sum += nums[right];
right++;
}
while (sum >=s){
minimum = min(minimum, right-left);
sum -= nums[left];
left++;
}
}
if (minimum == n+1)