滑动窗口最大和 - 滑动窗口

系列文章目录


前言

本人最近再练习算法,所以会发布一些解题思路,希望大家多指教

一、题目描述

有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止,每次窗口滑动产生一个窗口和(窗口内所有数和和),求窗口滑动产生的所有窗口和的最大值。

二、输入描述

第一行输入一个正整数N,表示整数个数。(0<N<100000)。
第二行输入N个整数,整数的取值范围为[-100,100]。
第三行输入一个正整数M,M代表窗口大小,M<=100000,且M<=N。

三、输出描述

窗口滑动产生的所有窗口和的最大值。
例如:
1、输入

“6”
“10 20 30 15 23 12”
“3”

2、输出

“68”

3、说明

窗口长度为3,窗口滑动产生的窗口和分别为10+20+30=60,20+30+15=65,30+15+23=68,15+23+12=50,所以窗口滑动产生的所有窗口和的最大值为68。

四、java代码

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());
        int[] array = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int M = sc.nextInt();
        int right = M;
        int left = 0;
        int sum = 0;
        //初始化窗口
        for (int i = 0; i < M; i++) {
            sum += array[i];
        }
        //将第一个窗口的值赋值给max
        int max = sum;
        //右侧窗口不能超过边界值
        while (right < array.length) {
            //左侧移除一位
            sum -= array[left++];
            //右侧加入一位
            sum += array[right++];
            max = Math.max(max, sum);
        }
        System.out.println(max);
    }

五、测试用例

输入:
6
10 20 30 15 23 12
3
输出:
在这里插入图片描述

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值