题目描述
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.
Example:
Input:s = 7, nums = [2,3,1,2,4,3]
Output: 2 Explanation: the subarray[4,3]
has the minimal length under the problem constraint.
Follow up:
If you have figured out the
O(
n) solution, try coding another solution of which the time complexity is
O(
n log
n).
代码实现
#include <algorithm>
#include <climits>
using std::min;
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int n = nums.size();
int sum = 0;
int i;
for (i = 0; i < n; ++i) {
sum += nums[i];
}
if (sum < s) {
return 0;
}
int j;
int res = INT_MAX;
i = j = 0;
sum = 0;
while (j < n) {
while (j < n && sum < s) {
sum += nums[j++];
}
while (i < j && sum >= s) {
res = min(res, j - i);
sum -= nums[i++];
}
}
return res;
}
};