终于不用找实习了,恢复一下学习的节奏。
原题
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;
}
};
本文详细解析了LeetCode209题目的算法实现,采用双指针法寻找满足条件的最短连续子数组。通过一个具体示例,展示了如何逐步推进起始和结束索引,最终找到目标子数组。
1233

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



