【华为OD题库-040】计算最接近的数-java

题目

给定一个数组X和正整数K,请找出使表达式X[i]-x[i+1]…-X[i+k-1],结果最接近于数组中位数的下标i,如果有多个满足条件,请返回最大的i。
其中,数组中位数:长度为N的数组,按照元素的值大小升序排列后,下标为N/2元素的值
补充说明:
1.数组X的元素均为正整数;
2.X的长度n取值范围: 2<= n <= 1000;
3.K大于0且小于数组的大小;
4. i的取值范围:0<=i < 1000;
5.题目的排序数组X[N]的中位数是X[N/2].
示例1
输入:
[50,50,2,3],2
输出:
1
说明:
1、中位数为50:[50,50,2,3]升序排序后变成[2,3,50,50],中位数为下标4/2=2的元素50;
2、计算结果为1:X[50,50,2,3]根据题目计算X[i]-x[i+1]…-X[i+k-1]得出三个数
0 (X[0]-X[1]= 50 -50),
48(X[1]-X[2]= 50 -2),
-1(X[2]-X[3]= 2-3),
其中48最接近50,因此返回下标1

思路

对于任意序列,如:20 5 8 4 3 2 5,k=3
先求中位数,从小到大排序,取中间的数:2 3 4 5 5 8 20,中位数target为5,
初始情况:res=0,diff=20-5-8=7,与target的差值为2。
然后将i右移动,如下:
在这里插入图片描述
此时,diff=5-8-4,以j为参照,i=j-k+1; 和上个区间相比:
diff1=20-5-8
diff2=5-8-4
diff2=diff1-nums[j-k]+2*nums[j-k+1]-nums[j]
此时再来计算diff2与target的差值,看他是否更接近target
依次类推,直到j为最后一个元素。
遍历完成后即可得到目标i=j-k+1

题解

package hwod;import java.util.Arrays;
import java.util.Scanner;public class CalNearestNum {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] input = sc.nextLine().split("],");int k = Integer.parseInt(input[1]);int[] nums = Arrays.stream(input[0].substring(1).split(",")).mapToInt(Integer::parseInt).toArray();System.out.println(calNearestNum(nums, k));}private static int calNearestNum(int[] nums, int k) {//计算中位数int[] sortNums = Arrays.copyOf(nums, nums.length);Arrays.sort(sortNums);int target = sortNums[nums.length / 2];int diff = nums[0];for (int i = 1; i < k; i++) {diff -= nums[i];}int res = 0;int min = Math.abs(diff - target);for (int i = k; i <= nums.length - 1; i++) {diff = diff - nums[i - k] + 2 * nums[i - k + 1] - nums[i];if (Math.abs(diff - target) <= min) {res = i - k + 1;min = Math.abs(diff - target);}}return res;}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

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

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

相关文章

「阿里巴巴」裁撤量子实验室!

据内部消息&#xff0c;阿里巴巴达摩院由于预算及盈利等原因&#xff0c;已经撤裁旗下量子实验室。此次&#xff0c;共计裁减30余人。 达摩院官网已撤下量子实验室的相关介绍页面。上图&#xff1a;早先关于量子实验室的相关介绍&#xff1b;下图&#xff1a;现在达摩院官网“实…

js中声明变量的关键字(const,let,var)

const 特点&#xff1a; const不允许在同一作用域重复声明&#xff0c;块级作用域暂时性死区&#xff0c;在声明之前&#xff0c;该变量是不可用的const声明的是一个只读变量&#xff0c;声明之后不能改变其值&#xff0c;一旦声明必须初始化但是const定义的对象属性是可以修…

Linux 局域网传输工具LANDrop安装

Linux 局域网传输工具LANDrop安装 &#x1f959;下载&#x1f32d;解压&#x1f96a;运行 &#x1f959;下载 官网下载 或网盘 &#x1f32d;解压 使用以下命令解压获得squashfs-root文件夹 ./LANDrop-latest-linux.AppImage --appimage-extract&#x1f96a;运行 进入squ…

flutter 文本不随系统设置而改变大小[最全的整理]

文本不随系统设置而改变大小[三] 前言方案十三&#xff1a;使用Flexible方案十四&#xff1a;使用MediaQueryData的textScaleFactor属性方案十五&#xff1a;使用FractionallySizedBox方案十六&#xff1a;使用自定义文本样式方案十七&#xff1a;使用自定义绘制&#xff08;Cu…

#sftp命令传输及基础问题分析

文章目录 一、sftp命令简介二、sftp登录连接远程服务器 三、基础操作命令上传文件下载文件 四、其他操作命令五、登录报错处理 解决ssh connect to host port 22 Connection refused1.检查SSH服务器正在监听端口22&#xff0c;默认情况下&#xff0c;SSH使用端口22进行通信。如…

DS二叉树--赫夫曼树解码/最优二叉树【数据结构】

DS二叉树–赫夫曼树解码 题目描述 已知赫夫曼编码算法和程序&#xff0c;在此基础上进行赫夫曼解码 可以增加一个函数&#xff1a;int Decode(const string codestr, char txtstr[]);//输入编码串codestr&#xff0c;输出解码串txtstr 该方法如果解码成功则返回1&#xff0c…

『heqingchun-Ubuntu系统+x86架构+配置编译安装使用yolov5-6.0+带有TensorRT硬件加速+封装动态库+C++部署+Qt』

Ubuntu系统+x86架构+配置编译安装使用yolov5-6.0+带有TensorRT硬件加速+封装动态库+C++部署+Qt 学习本篇文章后你会:部署yolov5-6.0版本、模型转换(.pt->.wts->.engine)、将yolov5-6.0封装动态库并得到深度学习推理结果,最后在qt或其他项目中调用使用。 一、准备文…

Doris_Doris导入常见问题

Doris数据导入错误 &#xff1a;the length of input is too larger than schema 可能原因&#xff1a;varchar长度设置过短 Doris表字段乱序 导入palo表中的csv本身无schema信息&#xff0c;csv与palo表字段顺序必须一致&#xff0c;否则会错乱 Doris数据文件中字段比表字段…

探秘:性能测试中最常见的陷阱与解决方案!

概述一下性能测试流程&#xff1f; 1.分析性能需求。挑选用户使用最频繁的场景来测试。确定性能指标&#xff0c;比如&#xff1a;事务通过率为100%&#xff0c;TOP99%是5秒&#xff0c;最大并发用户为1000人&#xff0c;CPU和内存的使用率在70%以下2.制定性能测试计划&#x…

如何解决中小制造业企业信息化难题?

中小企的信息化&#xff0c;难&#xff01; 一、中小制造业企业信息化困难的原因主要有以下几点&#xff1a; 资金限制&#xff1a;中小制造业企业相对于大型企业来说资金有限&#xff0c;无法投入大量资金进行信息化建设。技术水平不足&#xff1a;中小制造业企业缺乏专业的…

C语言文件操作 | 文件分类、文件打开与关闭、文件的读写、文件状态、文件删除与重命名、文件缓冲区

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Leetcode—828.统计子串中的唯一字符【困难】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—828.统计子串中的唯一字符 算法思想 枚举所有种类字母在s中出现的位置&#xff0c;分别统计只包含这个字母不包含该类字母中其他字母的子串个数 实现代码 int uniqueLetterString(char* s) {int len strlen(s);cha…

四川天蝶电子商务有限公司真实可靠吗?

随着数字经济的不断发展&#xff0c;抖音电商服务日益成为企业拓展销售渠道、提升品牌影响力的关键一环。在这样的大背景下&#xff0c;四川天蝶电子商务有限公司凭借其专业的服务能力和创新的技术手段&#xff0c;迅速崛起为抖音电商服务领域的领军企业。 四川天蝶电子商务有限…

【解决方案】基于边缘计算技术的安科瑞综合管廊能效管理平台

平台背景 综合管廊一般是建于城市地下用于容纳两类及以上城市工程管线的构筑物及附属设施&#xff0c;将电力、自来水、热力、煤气、电信、网络等市政公用管线根据规划要求集中敷设在同一个构建物内&#xff0c;实施统一设计、施工、管理的市政公用隧道空间&#xff0c;并且还…

NAS层协议学习(三)

消息结构 每个NAS消息包含一个协议鉴别符和一个消息标识。协议鉴别符是一个 4 位值&#xff0c;指示正在使用的协议&#xff0c;即对于 EPS NAS 消息是 EMM 或 ESM。消息标识指示发送的特定消息。 EMM 消息还包含一个安全标头&#xff0c;指示消息是否受到完整性保护和/或加密…

DS图—图的最短路径/Dijkstra算法【数据结构】

DS图—图的最短路径/Dijkstra算法【数据结构】 题目描述 给出一个图的邻接矩阵&#xff0c;输入顶点v&#xff0c;用迪杰斯特拉算法求顶点v到其它顶点的最短路径。 输入 第一行输入t&#xff0c;表示有t个测试实例 第二行输入顶点数n和n个顶点信息 第三行起&#xff0c;每行…

设计模式应用之java代码实现(一)

文章目录 前言外观模式享元模式职责链模式命令模式命令模式2命令模式3备忘录模式迭代器模式观察者模式状态模式 前言 本篇博客截取的是**《C#设计模式&#xff08;第2版&#xff09;》这本书课后习题里面的各个设计模式的典型习题并完成java代码实现&#xff0c;每个代码实现都…

【链接MySQL】教你用VBA链接MySQL数据库

hi&#xff0c;大家好呀&#xff01; 之前呢&#xff0c;给大家分享过一个自制链接表管理器的文章&#xff0c;文章中有链接SQL Server数据库的代码&#xff0c;大家对这一段代码比较有兴趣&#xff0c;既然大家有兴趣&#xff0c;那我们今天就来讲一下链接数据库的代码。 这…

nginx配置全解析

#用于指定 Nginx 进程运行的用户和用户组&#xff0c;root 用户具有系统的最高权限&#xff08;潜在的安全漏洞&#xff09;可以用use nginx>非特权用户&#xff08;通常是 nginx&#xff09;的身份运行 user root; #Nginx服务器能够同时处理的连接数量(设置服务器cpu核数)…

抽象工厂模式-C语言实现

说明&#xff1a; 均由 chatgpt生成&#xff0c;实例可以看出无法运行&#xff0c;仅供参考~ 抽象工厂模式&#xff1a; 代码实现&#xff1a; #include <stdio.h>// 定义抽象产品接口 typedef struct {void (*operation)(); } AbstractProductA;typedef struct {voi…