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.
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int n = nums.size();
vector<int> sum(n + 1, 0);
for (int i = 1; i <= n; ++i) {
sum[i] = sum[i - 1] + nums[i - 1];
}
if (sum[n] < s)
return 0;
int front = 0, back = 1;
int ans = n;
while (back <= n) {
if (sum[back] - sum[front] < s) {
++back;
}
else {
ans = back - front < ans ? back - front : ans;
++front;
}
}
return ans;
}
};