算法复习:滑动窗口

Posted dzzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法复习:滑动窗口相关的知识,希望对你有一定的参考价值。

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

注意特值和边界

 计算局部和可以简化计算

以上是关于算法复习:滑动窗口的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试 -滑动窗口最大和(Java) | 机试题+算法思路+考点+代码解析 2023

华为OD机试 -滑动窗口最大和(Java) | 机试题+算法思路+考点+代码解析 2023

JavaScript滑动窗口算法

如何实现更好的滑动窗口算法?

代码随想录算法训练营第13天 | ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结

算法总结之滑动窗口