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

2023-09-21 12:36:38

在这里插入图片描述

华为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算法源码

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在线答疑。

在这里插入图片描述

更多推荐

Qt(day3)

思维导图小练习second.h#ifndefSECOND_H#defineSECOND_H#include<QWidget>#include<QLabel>#include<QLineEdit>#include<QPushButton>#include<QTimerEvent>#include<QTime>#inclu

U盘提示格式化怎么办?3个方法轻松解决!

“我的u盘已经很久没用了,今天刚把u盘插入电脑就显示需要进行格式化。但是我还有很多重要的文件都保存在里面呢。这可怎么办呀?有什么方法恢复里面的数据吗?”u盘是我们日常生活中常用的移动存储设备之一,但有时可能会遇到一个让人烦恼的问题,那就是当插入U盘时,系统可能会弹出“u盘提示格式化”字样。这种情况可能导致数据丢失,因此

软件测试的方法总结

根据利用的被测对象信息的不同,可以将软件测试方法分为:黑盒测试、灰盒测试、白盒测试。1、白盒测试1)概念:是依据被测软件分析程序内部构造,并根据内部构造分析用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况,即已知软件产品的内部实现过程,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部成分是否

常用设计模式总结

策略模式定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。观察者模式在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象就会收到通知,并自动更新。观察者定义了对象之间一对多的关系主题(也就是可观察者)用一个共同的接口来更新观察者观察者与可观察者之间用松耦合方式结

Scala 高阶:Scala中的模式匹配

一、概述Scala中的模式匹配(case)类似于Java中的switch...case,但是Scala的模式匹配功能更为强大。通过模式匹配,可以匹配更复杂的条件和数据结构,包括常量、类型、集合、元组等。而Java的switch语句只能用于匹配整型或枚举类型。二、基本语法Javapublicstaticvoidmain(

详解ESP32模块的引脚分配图和定义

最近在研究单片机,买了一块ESP32开发板,记录一下所有引脚的定义。ESP32的优势之一是它的GPIO比ESP8266多得多。您不必兼顾或多复用IO。有几件事要注意,因此请仔细查看引脚分配图。ESP32外围设备和I/O尽管ESP32总共有48个GPIO引脚,但其中只有25个引出到开发板两侧的插头。这些引脚可以分配给各种

SOCKS5 认证的方法

在进行网络浏览或爬虫等相关工作时,我们经常会遇到需要使用SOCKS5代理认证的情况。然而,某些浏览器可能不提供原生支持SOCKS5代理认证的选项,给我们带来了一些困扰。本文将为大家介绍几种解决浏览器不支持SOCKS5代理认证问题的方法。一、使用代理转发工具1.使用Privoxy:Privoxy是一款开源的代理转发工具,

通讯网关软件002——利用CommGate X2HTTP-U实现HTTP访问OPC UA Server

本文介绍利用CommGateX2HTTP-U实现HTTP访问OPCUAServer。CommGateX2HTTP是宁波科安网信开发的网关软件,软件可以登录到网信智汇(wangxinzhihui.com)下载。【案例】如下图所示,实现上位机通过HTTP来获取OPCUAServer的数据。【解决方案】设置网关机,与OPCU

JavaScript学习总结(作用域、JS预解析)

一、作用域1、作用域概述通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">

如何延迟Fragment的导航过渡

目录前言postponeEnterTransitionstartPostponedEnterTransitionexecutePendingTransactions总结前言做应用提高用户体验是很关键的,对于用户体验来说有一件事是不能回避的,就是页面切换的过渡动画。因为后一个页面可能会加载数据,所以切换时后一个页面是空白

npm发布vue3自定义组件库--方法二

npm发布vue3自定义组件库创建项目vuecreatetest-ui自定义组件创建自定义组件,组件名称根据你的需求来,最好一个组件一个文件夹,下图是我的示例。src/components组件和你写页面一样,所谓组件就是方便实用,不用重复搬动页面到不同的项目,可以直接install到你本地的项目,下图是一个组件示例。编

热文推荐