您的位置:首页 > 其它

LeetCode 209. Minimum Size Subarray Sum

2016-04-09 23:52 344 查看
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.

Classical two pointers problem.

#include <vector>
#include <iostream>
#include <limits>
using namespace std;

int minSubArrayLen(int target, vector<int>& nums) {
int minLen = nums.size() + 1;  // basically any number wont reach is fine. Usually use INT_MAX
int sum = 0;
int i = 0, j = 0; // two pointers. One keep tracking the low scope, one tracking the high scope.
while(i < nums.size()) {
sum = sum + nums[i];
while(sum >= target) {
minLen = min(minLen, i - j + 1);
sum = sum - nums[j];
j++;
}
i++;
}
return minLen == nums.size() + 1 ? 0 : minLen;
}

int main(void) {
vector<int> nums {7};
int len = minSubArrayLen(7, nums);
cout << len << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: