码迷,mamicode.com
首页 > 编程语言 > 详细

算法复习:滑动窗口

时间:2020-02-01 19:04:34      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:etc   splay   i++   ble   +=   open   https   nbsp   array   

leedcode 209 长度最小的子数组

滑动窗口的思想是:

1、设定前指针和后指针,先向后移动后指针直到满足条件,

2、然后向后移动前指针判断是否仍满足条件,

3、如果不满足条件继续向后移动后指针直到满足条件,找出满足条件的最短序列即可。

技术图片
class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums)
    {
        //先计算部分和
        int *donser,sum=0,size=nums.size();
        donser=new int[size];
        for(int i=0;i<size;i++)
        {
            sum+=nums[i];
            donser[i]=sum;
        }
        //滑动窗
        int up=0,down=1,lable_min=size;
        if(size<=1)
        {
            if(size<1)
                return 0;
            else if(nums[0]>=s)
                return 1;
            else
                return 0;
        }
        if(donser[size-1]<s)
            return 0;
        if(donser[0]>=s)
            return 1;
        while(down<size)
        {
            int sum_now;
            if(up==0)
                sum_now=donser[down];
            else
                sum_now=donser[down]-donser[up-1];
            if(sum_now<s)
            {
                down++;
                continue;
            }
            if(sum_now>=s)
            {
                if(down-up+1<lable_min)
                    lable_min=down-up+1;
                up++;
            }
        }
        return lable_min;
    }
};
leedcode 209

注意特值和边界

 计算局部和可以简化计算

算法复习:滑动窗口

标签:etc   splay   i++   ble   +=   open   https   nbsp   array   

原文地址:https://www.cnblogs.com/dzzy/p/12249440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!