题解 | #长度最小的连续子数组#

长度最小的连续子数组

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;
        
    }
};

使用滑动窗口法避免了回溯

全部评论

相关推荐

我知道自己这个念头不好,但是真的很羡慕😭大家的父母长辈都能帮到自己吗?
大飞的诡术妖姬:父母都是普通打工人,身体也不好,能供我读到本科毕业很不容易,毕业以后帮衬心里会有罪恶感。虽然可能会错过很多风景,但还是想活的心安理得。
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客企业服务