滑动窗口算法学习

最近做了几道有关滑动窗口的算法,在此总结一下。

滑动窗口

  • 就像描述的那样,可以理解成是一个会滑动的窗口,每次记录下窗口的状态,再找出符合条件的适合的窗口
  • 可以使用滑动窗口来减少时间复杂度

经典滑动窗口题目

给一组大小为n的整数数组,计算长度为k的子数组的最大值
比如:数组{1,2,3,4,5,7,6,1,8},k=2,那么最终结果应该是7+6=13最大。
最简单的是使用两层遍历,通过所有情况找出最大的一个子数组,时间复杂度O(N^2)
使用滑动窗口,从[0,k-1]的一个窗口,记录其总和,然后窗口向右移动到[1,k],再到[2,k+1],直到数组的最尾端,找出里面总和最大的一个窗口,这样的解法就是滑动窗口算法。

//Java代码:
public class SlidingWindow {
    public static int maxnum(int[] array,int k){
        if(array.length<k){//如果k比数组长度还大,返回-1
            return -1;
        }
        int left=0;
        int sum=0;
        for(int i=0;i<k;i++){
            sum+=array[i];
        }
        int tempsum=sum;//tempsum记录每个窗口的总和
        while (left+k<array.length){
            tempsum=tempsum-arra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值