class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
int minSubarray(vector<int>& nums, int target) {
// write code here
if(nums.size()==0)
return 0;
//使用滑动窗口法
int slow=0;
int fast=0;
int sum=0;//当前窗口的总和
int minL=nums.size();
int curL=0;//当前窗口长度
while(fast<=nums.size()-1||sum>target)//快指针到达末尾,并且区间总值小于sum时才退出循环
{
if(sum<target||fast==slow)//窗口值大小不足或者窗口长度最小时,移动快指针
{
fast++;
curL++;
if(fast<=nums.size()-1)
sum+=nums[fast];
continue;
}
else
{
if(curL<minL)
{
minL=curL;
}
sum-=nums[slow++];//缩小窗口
--curL;
continue;
}
}
return minL;
}
};
使用滑动窗口法避免了回溯



京公网安备 11010502036488号