华为OD机试真题 Java 实现【计算最接近的数】【2023 B卷 100分】,附详细解题思路

news2025/2/25 12:07:07

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、具体解题步骤
    • 六、Java算法源码
    • 七、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

  • 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。

在这里插入图片描述

一、题目描述

给定一个数组X和正整数K,请找出使表达式X[i] - X[i+1] ... - X[i + K +1],结果最接近于数组中位数的下标i,如果有多个i满足条件,请返回最大的i。

其中,数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为N/2元素的值。

二、输入描述

第一行输入一个数组X;
第二行输入正整数K;

三、输出描述

数组中位数的下标i。

四、解题思路

因为数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为N/2元素的值。

  1. 比如输入[40,50,15,21,9],升序排序后变为[9,15,21,40,50];
  2. 中位数为长度为5的数组/2=2的元素21;

给定一个数组X和正整数K,请找出使表达式X[i] - X[i+1] ... - X[i + K +1],结果最接近于数组中位数的下标i,如果有多个i满足条件,请返回最大的i。

[40,50,15,21,9]
K=2

  1. i为0时,X[0] - X[1] - X[2]- X[3] = 40 - 50 - 15 - 21 = -46;
  2. i=1时,X[1] - X[2]- X[3]- X[4] = 50 - 15 - 21 - 9 = 5;
  3. i=2时,X[2]- X[3] - X[4]= 15 - 21 - 9 = -15;
  4. i=3时,X[3] - X[4]= 21 - 9 = 12;
  5. i=4时,X[4]= 9;

因为中位数是21,最接近它的值是12,故输出下角标3。

五、具体解题步骤

  1. 给定一个数组X,空格分隔;
  2. 输入正整数K;
  3. 求出中位数mid;
    • 按照元素的值大小升序排列;
    • 数组中位数 = 下标为N/2元素的值;
  4. 定义变量index,存储数组中位数的下标i;
  5. 根据表达式X[i] - X[i+1] ... - X[i + K +1],对数组X进行循环遍历;
  6. 求计算结果与中位数的距离;
  7. 获取结果最接近于数组中位数的下标i;
  8. 如果有多个i满足条件,请返回最大的i;
  9. 输出数组中位数的下标i;

六、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    // 给定一个数组X
    String arr = sc.nextLine();
    int[] X = Arrays.stream(arr.substring(1,arr.length()-1).split(",")).mapToInt(Integer::parseInt).toArray();
    // 输入正整数K
    int K = Integer.valueOf(sc.nextLine());

    // 因为数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为N/2元素的值。
    // 1. 按照元素的值大小升序排列
    int[] sortArr = Arrays.stream(X).sorted().toArray();
    // 2. 数组中位数
    int mid = sortArr[X.length / 2];

    int min = Integer.MAX_VALUE;
    // 数组中位数的下标i
    int index = -1;
    for (int i = 0; i <= X.length - K; i++) {
        // X[i] - X[i+1] ... - X[i + K +1]
        int count = X[i];
        for (int j = i + 1; j < i + K; j++) {
            count -= X[j];
        }
        // 求计算结果与中位数的距离
        int abs = Math.abs(count - mid);
        // 获取结果最接近于数组中位数的下标i
        min = Math.min(min, abs);
        // 如果有多个i满足条件,请返回最大的i
        if (min == abs) {
            index = i;
        }
    }

    System.out.println(index);
}

七、效果展示

1、输入

[40,50,15,21,9]
2

2、输出

3

3、说明

因为数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为N/2元素的值。

  1. 比如输入[40,50,15,21,9],升序排序后变为[9,15,21,40,50];
  2. 中位数为长度为5的数组/2=2的元素21;

给定一个数组X和正整数K,请找出使表达式X[i] - X[i+1] ... - X[i + K +1],结果最接近于数组中位数的下标i,如果有多个i满足条件,请返回最大的i。

[40,50,15,21,9]
K=2

  1. i为0时,X[0] - X[1] - X[2]- X[3] = 40 - 50 - 15 - 21 = -46;
  2. i=1时,X[1] - X[2]- X[3]- X[4] = 50 - 15 - 21 - 9 = 5;
  3. i=2时,X[2]- X[3] - X[4]= 15 - 21 - 9 = -15;
  4. i=3时,X[3] - X[4]= 21 - 9 = 12;
  5. i=4时,X[4]= 9;

因为中位数是21,最接近它的值是12,故输出下角标3。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP第六次作业

1.创建VLAN&#xff0c;并改变相连各自PC接口的类型&#xff0c;同时划分VLAN&#xff0c;做策略即保证&#xff1a;pc2可以访问PC4/5/6;但PC4可以访问Pc5&#xff0c;不能访问PC6 &#xff1b;PC5不能访问PC6 [sw1]vlan batch 2 to 5 批量创建VLAN [sw1]int g0/0/1 [sw1-Gig…

MySQL数据库与表的基本操作 + 表的基本CRUD(增删改查)操作

文章目录 前言一、库的基本操作显示当前所有数据库创建数据库使用数据库删除数据库 二、表的基本操作创建表查看库中所有表查看表结构删除表 三、表的增删改查(基础)新增数据(Create)全列插入指定列插入 查询数据(Retrieve)全列查询指定列查询查询字段为表达式指定列的别名去重…

微服务: 04-springboot中rabbitmq配置,消息回收,序列化方式

目录 1. 本文简介: 1.1 java序列化的缺点 ---> 1.1.1 无法跨语言 --->1.1.2 易被攻击 ---> 1.1.3 序列化后的流太大 ---> 1.1.4 序列化性能太差 2. 配置总览 2.1 基础配置 2.2 连接重试配置 2.3 异常重试机制 2.4 确认模式(本篇是自动) ---> 2.4.1…

VoIP监控工具有什么作用

VoIP 监控工具利用思科的 IPSLA 技术生成合成流量并监控客户端体验的呼叫质量。与被动监控VoIP指标相反&#xff0c;IPSLA技术允许IT管理员主动并在潜在问题发生之前检测到它们&#xff0c;这使组织能够轻松遵守严格的SLA指标。 思科 IPSLA 技术在两台设备之间创建流量&#x…

【Ceph集群应用】Ceph块存储之RBD接口详解

Ceph块存储之RBD接口详解 1.创建Ceph块存储系统RBD接口1.1 删除镜像1.2 还原镜像1.3 在线扩容1.4 回滚镜像到指定位置1.5 删除快照1.6 快照分层1.7 快照展平1.8 镜像的导出导入 接上文基于ceph-deploy部署Ceph集群详解 1.创建Ceph块存储系统RBD接口 &#xff08;1&#xff09;…

一文9个步骤带你从0到1入门接口自动化测试!

1.请问你是如何做接口测试的&#xff1f; 大体来说&#xff0c;经历以下过程&#xff1a;接口需求调研、接口测试工具选择、接口测试用例编写、接口测试执行、接口测试回归、接口测试自动化持续集成。 具体来说&#xff0c;接口测试流程分成以下九步&#xff1a; 第一步&…

设计模式 ~ 观察者模式

概念 观察者模式是一种设计模式&#xff0c;也被称为发布-订阅模式或事件模式&#xff1b; 用于在对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新&#xff1b; ~ 如&#xff1a;DOM事件、vue …

【Windows】重新安装显卡

我的设备&#xff1a; ROG 幻15 显卡重装教程&#xff1a; 进入nvidia官网 https://www.nvidia.cn/geforce/drivers/ 下载GeForce Game Ready 驱动程序

哇~真的是你呀!今天是LIUNX中的SAMBA。

目录 前言 一、概述 二、安装 三、在SAMBA服务器中设置共享目录 四、客户端查看共享目录及登录 五、本地映射 六、客户端自动挂载 七、用户别名 八、访问控制 总结 前言 SAMBA是一个开源的软件套件&#xff0c;用于在Linux和UNIX系统上实现SMB/CIFS网络协议。SMB&#xff08;S…

blender 阵列修改器

效果 tab 键进入编辑模式&#xff0c;全选制作好的模型&#xff0c;gx 移动模型置于游标原点&#xff1b; 阵列修改器&#xff1a; 相对偏移&#xff1a;以物体的长宽高为比例&#xff0c;调整x y z 的数值&#xff0c;在 x y z 方向上做不同比例的偏移&#xff1b; 恒定偏移…

GPT 吞噬一切!我们还需要编程语言吗?

本文由 GPT- 4 所创作&#xff0c;配图由 Stable Doodle 及 ChatGPT 们生成。 编者按 AGI 的未来&#xff0c;究竟属于 Rust 还是 Mojo&#xff1f;或者我们还需要编程语言吗&#xff1f; 今天&#xff0c;LLVM 之父、苹果的编程语言 Swift 之父、新编程语言 Mojo 之父 Chris…

经典常谈思维导图怎么制作?手把手教你制作

经典常谈思维导图怎么制作&#xff1f;创建思维导图可以帮助我们更好地组织和整理信息&#xff0c;帮助我们更好地理解和记忆信息。它可以使我们更高效地学习和工作&#xff0c;并帮助我们更好地表达和分享我们的想法和想法。因此&#xff0c;制作思维导图是一种非常有用的技能…

uboot移植裁剪原理和流程

一、Uboot的裁剪是裁剪什么&#xff1f; Uboot的裁剪分为两个方面&#xff1a;Uboot本身命令的裁剪和具体SoC硬件配置的裁剪。 1、Uboot本身命令的裁剪   Uboot提供了很多的操作命令&#xff0c;我们使用Uboot的时候通常只使用最常用的一些命令&#xff0c;其他很多的命令有…

Azido cyclic(RGDyK)整合素靶向环肽c(RGDyK),试剂有哪些特点?

资料编撰来源&#xff1a;陕西新研博美生物科技有限公司小编MISSwu Azido cyclic&#xff08;RGDyK&#xff09;环肽 PART1-----Product structure PART2------Product specifications 1.CAS No&#xff1a;N/A 2.Molecular formula&#xff1a;C35H46N12O9.CF3COOH 3.Molecul…

06-C++ 基本算法 - 二分法

&#x1f4d6; 前言 在这个笔记中&#xff0c;我们将介绍二分法这种基本的算法思想&#xff0c;以及它在 C 中的应用。我们将从一个小游戏猜数字开始&#xff0c;通过这个案例来引出二分法的概念。然后我们将详细讲解什么是二分法以及它的套路和应用。最后&#xff0c;我们还会…

基于VUE的音乐qq网站设计与实现(Java+spring boot+MySQL+VUE)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于VUE的音乐qq网站设计与实现&#xff08;Javaspring bootMySQLVUE&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springboot框架 my…

基于RASC的keil电子时钟制作(瑞萨RA)(2)----配置keil以及使用串口进行打印

基于RASC的keil电子时钟制作_配置keil以及使用串口进行打印 概述参考文档硬件准备视频教程新建工程保存工程路径芯片配置工程模板选择时钟设置管脚配置UART配置UART属性配置DEBUG配置printf()函数设置e2studio堆栈生成工程设置RA Smart Configurator到Keilkeil配置Ddbug设置R_S…

SpringSecurity(6.1.x版本) 认证,授权,自定义登录,内部机制探讨

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击SFA会话固定攻击XSS跨站脚本攻击开发环境搭建认证直接认证使用数据库认证自定义验证 其他配置自定义登录界面记住我功能 授权基于角色授权基于权限授权使用注解权限判断 内部机制探究授权校验流程安全上下文安全上下…

嵌入式必学~黑马新教程发布,你准备好了吗

科技的不断发展&#xff0c;给计算机行业带来了很多机会&#xff0c;嵌入式开发的前景也越来越广阔&#xff0c;过去的嵌入式是&#xff1a;电器、机械、交通设备。现在的嵌入式是&#xff1a;手机、智能家居、物联网、新能源、新基建、芯片...... 随着国家政策的倾斜&#xf…

配置uprof环境

AMD uprof 1/从AMD μProf | AMD处下载两个文档 2/解压 tar jxvf filename 3/将.rpm转换成deb Ubuntu的软件包格式是deb&#xff0c;如果要安装rpm的包&#xff0c;则要先用alien把rpm转换成deb。 sudo apt-get install alien #alien默认没有安装&#xff0c;所以首先要安…