题目:
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.
思路:
设置两个变量left与right,都指向第一个变量,cur_sum记录当前范围[left,right]内的元素之和。如果cur_sum>=s,则left前进一步;否则,right前进一步。直到right走到最后。
代码实现:
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
if (nums.size() < 2){
return 0;
}
int min_len = INT_MAX;
int left = 0;
int right = 0;
int cur_sum = nums[0];
while (right < nums.size()){
if (cur_sum >= s){
if (right-left+1 < min_len){
min_len = right-left+1;
}
if (left < right){
cur_sum -= nums[left];
++left;
}else{
++right;
if (right >= nums.size()){
break;
}
cur_sum += nums[right];
}
}else{
++right;
if (right >= nums.size()){
break;
}
cur_sum += nums[right];
}
}
if (min_len == INT_MAX){
min_len = 0;
}
return min_len;
}
};