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;
}
本文介绍了一个经典的双指针问题,即寻找一个正整数数组中满足总和大于等于给定目标值的最小子数组长度。通过使用两个指针分别跟踪子数组的起始和结束位置,实现了一种高效算法来解决此问题。
1236

被折叠的 条评论
为什么被折叠?



