华为OD机试 - 滑动窗口最大和 - 滑动窗口(Java 2023 B卷 100分)

目录

华为OD机试 2023B卷题库疯狂收录中,刷题++点这里++

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

有一个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、输出

48

3、说明

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

四、解题思路

  1. 第一行输入整数N;
  2. 第二行输入N个整数;
  3. 第三行输入滑动窗口大小M;
  4. 定义窗口滑动产生的所有窗口和的最大值max;
  5. 当滑动窗口大小为1时,取最大值即可;
    • 使用 Arrays.stream() 方法将数组转换为流,然后使用 max() 方法获取最大值;
  6. 通过滑动窗口算法获取窗口滑动产生的所有窗口和的最大值。

五、Java算法源码

java 复制代码
package com.guor.od;

import java.util.*;

public class OdTest {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 整数个数
        int N = Integer.valueOf(sc.nextLine());
        // N个整数
        int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        // 窗口大小
        int M = Integer.valueOf(sc.nextLine());
        
        // 窗口滑动产生的所有窗口和的最大值
        int max = Integer.MIN_VALUE;
        // 当滑动窗口大小为1时,取最大值即可
        if (M == 1) {
            // 使用 Arrays.stream() 方法将数组转换为流,然后使用 max() 方法获取最大值
            max = Arrays.stream(arr).max().getAsInt();
        } else {
            // 滑动窗口算法
            for (int i = 0; i < N - M + 1; i++) {
                int temp = 0;
                for (int j = i; j < i + M; j++) {
                    temp += arr[j];
                }

                if (temp > max) {
                    max = temp;
                }
            }
        }
        System.out.println(max);
    }
}

六、效果展示

1、输入

7

10 15 8 22 9 17 20

3

2、输出

48

3、说明

窗口长度为3,窗口滑动产生的窗口和分别为:

  • 10 15 8 = 33
  • 15 8 22 = 45
  • 8 22 9 = 39
  • 22 9 17 = 48
  • 9 17 20 = 46

窗口滑动产生的所有窗口和的最大值是48。

🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关推荐
小O的算法实验室1 天前
IEEE TII,学习为多目标深度学习生成偏好
人工智能·深度学习·学习
zlinear数据采集卡1 天前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
数据知道1 天前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
杨石兴1 天前
31、玩具MoM:用2x2矩阵串起全套流程
人工智能·算法·矩阵·电磁学
果果燕1 天前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++
江畔柳前堤1 天前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
Navigator_Z1 天前
LeetCode //C - 1192. Critical Connections in a Network
c语言·算法·leetcode
2601_949950631 天前
Java 面试准备,用练题簿把“背过八股”变成“真正会答”
java·开发语言·面试·刷题·小程序推荐
老洋葱Mr_Onion1 天前
【C++】信息学奥赛CSP通关之路——CSP-J/S第一轮原创全真模拟试卷集(2026)卷四全卷解析
开发语言·c++
吃好睡好便好1 天前
说说高温对情绪的影响
学习·生活·情绪·高温