终于不用找实习了,恢复一下学习的节奏。
原题
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.
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.
分析
在正如Tags所说,Tow Pointer
,由于子序列是连续的,因此,只需要两个索引一个表示开始,一个表示结尾。当当前的sum>target
就需要更新了,因为求的是大于等于target的最短子序列,否则的话就需要将索引往后加。
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int start=0;
int end=0;
int minIndex=0;
int maxIndex=nums.size();
int sum=0;
bool flag=false;
while(start<=end)
{
if(sum>=s)
{
flag=true;
if((end-start)<=(maxIndex-minIndex))
{
minIndex=start;
maxIndex=end;
}
sum-=nums[start];
++start;
}
else
{
if(end<nums.size())
{
sum+=nums[end];
++end;
}
else
break;
}
}
if(flag)
return maxIndex-minIndex;
else
return 0;
}
};