题解 | #长度最小的连续子数组#
长度最小的连续子数组
https://www.nowcoder.com/practice/10dd5f8c5d984aa3bd69788d86aaef23
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; } };
使用滑动窗口法避免了回溯