209. Minimum Size Subarray Sum**
原创
©著作权归作者所有:来自51CTO博客作者珍妮的选择的原创作品,请联系作者获取转载授权,否则将追究法律责任
209. Minimum Size Subarray Sum**
https://leetcode.com/problems/minimum-size-subarray-sum/
题目描述
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 solution, try coding another solution of which the time complexity is .
C++ 实现 1
双指针. 查找 nums[i ... j)
之和 . 我下面的代码有点魔幻~.
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int i = 0, j = 0, res = nums.size() + 1;
int sum = 0;
while (i < nums.size() && j < nums.size()) {
while (j < nums.size() && sum < s) sum += nums[j++];
while (sum >= s) {
res = std::min(res, j - i);
sum -= nums[i++];
}
}
return (res == nums.size() + 1) ? 0 : res;
}
};
C++ 实现 2
来自 LeetCode Submission. 这个代码可能更符合常规.
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int start = 0;
int minLength = INT_MAX;
int currSum = 0;
for(int i = 0; i < nums.size(); ++i) {
currSum += nums[i];
if(currSum >= s) {
while(currSum >= s) {
minLength = min(minLength, i-start+1);
currSum -= nums[start];
start++;
}
}
}
if(minLength == INT_MAX)
return 0;
return minLength;
}
};