【华为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),查看当前专栏更新的所有题目。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一练 | 华为认证真题练习Day138

1、IPv6地址FE80::2EO:FCFF:FE6F:4F36属于哪一类&#xff1f; A. 组播地址 B. 任播地址 C. 链路本地地址 D. 全球单播地址 2、如果IPv6的主机希望发出的报文最多经过10台路由器转发&#xff0c;则应该修改IPv6报文头中的哪个参数&#xff1f; A. Next Header B. Version …

基于单片机的大棚温湿度检测系统(论文+源码)

1. 系统设计 本课题主要开发一个大棚温湿度检测系统、其功能要求如下&#xff1a; 1.实现大棚温室环境的空气中的温湿度检测&#xff1b; 2.当检测到的土壤湿度低于阈值时&#xff0c;模拟水泵进行浇水&#xff0c;湿度太高则进行干燥&#xff1b; 4. 当检测到环境的温度太…

Git开发实用技巧

文章目录 一图胜千言&#xff1a;

【JMeter】配置元件

1. 元件的分类 HTTP Request Default 作用&#xff1a; 可以配置成通用的信息&#xff0c;可复用 ​​​​​​​ JDBC Connection Configuration 作用&#xff1a;连接数据库 前提&#xff1a; 下载好对应数据类型的jar包 ​​​​​​​ HTTP Header Manager信息头管理…

触控板窗口管理软件Swish mac中文版

Swish mac是一款触控板窗口管理工具&#xff0c;它允许用户通过简单的手势来控制窗口。Swish利用MacBook的触控板&#xff0c;使得用户可以更加便捷地管理窗口。它支持多种手势&#xff0c;例如捏合、拖动、放大和缩小等&#xff0c;使得用户可以轻松地实现窗口的切换、最小化、…

【项目实战】SpringBoot连接openGauss

一&#xff1a;Docker安装openGauss 1.下载openGauss 安装好Docker好以后&#xff0c;执行如下命令下载openGauss3.0镜像。docker pull enmotech/opengauss:3.0.0 2.运行openGauss 执行如下命令docker run -itd --name opengauss \ --restartalways \ --privilegedtrue \ …

老师怎样预防校园欺凌的发生

作为老师&#xff0c;面对校园欺凌这个问题&#xff0c;我觉得有必要为各位老师提供一些实用的建议和策略。因为大家都知道&#xff0c;校园欺凌的存在不仅会对学生造成身心伤害&#xff0c;还会对整个教育环境产生负面影响。 关注学生的心理健康 校园欺凌往往与学生的心理问题…

第二证券:北证50飙升引发跷跷板效应

沪指周一低开震动&#xff0c;盘中一度杀跌进入3000点整数关口&#xff0c;尽管午后跌幅有所收窄&#xff0c;但毕竟收盘仍在30日均线下方。深成指相同低开低走&#xff0c;表现稍弱于沪指。到收盘&#xff0c;沪指报收3031.7点&#xff0c;跌落0.3%&#xff1b;深成指报收9785…

【JavaScript】实现页面中填写文档、电子签名,填写完后 转为pdf并自动下载;附带psd转图片预览效果

效果图&#xff1a; 需求&#xff1a; 用户可以在线进行文档编辑&#xff0c;在线电子签名&#xff0c;然后点击可以另存为pdf文档 实现&#xff1a; 首先实现布局 让填写文档 随着页面的变化 一直保持居中 <!DOCTYPE html> <html lang"en"><head…

十八数藏的文化数字革新:传统之美的数字转变

在数字时代的冲击下&#xff0c;十八数藏以其独特的文化数字革新&#xff0c;将传统之美注入数字的脉络中&#xff0c;实现了非遗之珍的数字转变。这种数字化的创新不仅为传统工艺赋予了新的生命&#xff0c;也使得传承变得更为生动与全面。 十八数藏通过数字技术&#xff0c;将…

腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群

原创/朱季谦 最近买了一台4核16的腾讯云轻量应用服务器,花了我快四百的大洋&#xff0c;打算搭建一堆docker组件集群&#xff0c;最先开始是通过docker搭建redis集群&#xff0c;计划使用三个端口&#xff0c;分别是7001,7002,7003。 腾讯云服务器有防火墙限制&#xff0c;故…

建议收藏:华为海思IC设计笔试题,含解析(附下载)

华为海思一直以来是从业者想要进入的热门公司。但是岗位就那么多&#xff0c;在面试的时候&#xff0c;很多同学因为准备不充分&#xff0c;与岗位失之交臂&#xff0c;无缘进入该公司。今天为大家带来华为海思芯片岗的真题解析&#xff0c;如有错漏&#xff0c;欢迎指正哈。 今…

大数据平台/大数据技术与原理-实验报告--MapReduce编程

实验名称 MapReduce编程 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.30-2023.11.03 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有centos7.5系统…

Vue3-VueRouter4路由语法解析

1.创建路由实例由createRouter实现 2.路由模式 1&#xff09;history模式使用createWebHistory()&#xff1a;地址栏不带# 2&#xff09;hash模式使用createWebHashHistory()&#xff1a;地址栏带# 3&#xff09;参数是基础路径&#xff0c;默认/ 括号里的就是设置路径的前…

实战中使用的策略模式,使用@ConditionalOnProperty实现根据环境注册不同的bean

场景复现 举个例子&#xff0c;针对不同的设备的内存的不同加载一些资源的时候需要采取不同的策略&#xff0c;比如&#xff0c;在内存比较大的设备&#xff0c;可以一次性加载&#xff0c;繁殖需要使用懒加载&#xff0c;这个时候我们就可以采用配置文件配置中心去控制了 Cond…

使用Zoho Projects项目管理系统进行研发排期的策略与方法

研发排期旨在有序地填充待开发的就绪队列&#xff0c;明确最近的发布计划&#xff0c;让准备就绪的需求如行云流水般进入开发阶段。 使用Zoho Projects项目管理系统进行研发排期的步骤如下&#xff1a; 1.创建项目&#xff1a; 登录Zoho Projects账户&#xff0c;创建一个新项…

如何使用 Java 在Excel中创建下拉列表

下拉列表&#xff08;下拉框&#xff09;可以确保用户仅从预先给定的选项中进行选择&#xff0c;这样不仅能减少数据输入错误&#xff0c;还能节省时间提高效率。在MS Excel中&#xff0c;我们可以通过 “数据验证” 提供的选项来创建下拉列表&#xff0c;但如果要在Java程序中…

SRGAN 使用指南:将低分辨率图像转换为高分辨率图像

SRGAN、ESRGAN、Real-ESRGAN 使用指南 SRGAN网络结构优化目标 ESRGANReal-ESRGAN SRGAN 超分辨率&#xff1a;从低分辨率(LR)图像来估计其对应高分辨率(HR)图像的任务&#xff0c;被称作超分辨率(SR)。 SRGAN 图像超分辨率的深度学习模型&#xff0c;通过生成对抗网络&#x…

ESP32-Web-Server编程-HTML 基础

ESP32-Web-Server编程-HTML 基础 概述 HTML(HyperText Markup Language) 是用来描述网页的一种语言。其相关内容存储在前端代码的 .html 文件中。 当浏览器向 web 服务器请求网页时&#xff0c;一个 HTML 文件被发送给浏览器&#xff0c;浏览器解释该文件的内容&#xff0c;…

Java核心知识点整理大全20-笔记

目录 17. 设计模式 17.1.1. 设计原则 17.1.24. 解释器模式 18. 负载均衡 18.1.1.1. 四层负载均衡&#xff08;目标地址和端口交换&#xff09; 18.1.1.2. 七层负载均衡&#xff08;内容交换&#xff09; 18.1.2. 负载均衡算法/策略 18.1.2.1. 轮循均衡&#xff08;Roun…