华为OD机试 - 最佳植树距离 - 二分查找(Java 2023 B卷 100分)

news2025/2/27 5:04:32

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、备注说明
    • 五、二分查找
    • 六、解题思路
    • 七、Java算法源码
    • 八、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

一、题目描述

按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。

由于有些区域目前不适合种植树木,所以只能在一些可以种植的点来种植树木。 在树苗有限的情况下,要达到最佳效果,就要尽量散开种植,不同树苗之间的最小间距要尽量大。

给你一个适合种情树木的点坐标和一个树苗的数量,请帮小明选择一个最佳的最小种植间距。

例如,适合种植树木的位置分别为1,3,5,6,7,10,13 树苗数量是3,种植位置在1,7,13,树苗之间的间距都是6,均匀分开,就达到了散开种植的目的,最佳的最小种植间距是6。

二、输入描述

第1行表示适合种树的坐标数量。

第2行是适合种树的坐标位置。

第3行是树苗的数量。

三、输出描述

最佳的最小种植间距。

四、备注说明

位置范围为1~10000000

种植树苗的数量范围2~10000000

用例确保种植的树苗不会超过有效种植坐标数量

五、二分查找

二分查找(Binary Search),也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。

二分查找的基本思想是将数组分成两部分,确定待查找元素可能存在的那一部分,然后继续对该部分进行二分,直到找到目标元素或者确定该元素不存在于数组中。

比如下面这段Java代码:

public class BinarySearch {  
    public static int binarySearch(int[] array, int target) {  
        int left = 0;  
        int right = array.length - 1;  
  
        while (left <= right) {  
            int mid = (left + right) / 2;  
  
            if (array[mid] == target) {  
                return mid;  
            } else if (array[mid] < target) {  
                left = mid + 1;  
            } else {  
                right = mid - 1;  
            }  
        }  
  
        return -1;  
    }  
  
    public static void main(String[] args) {  
        int[] array = {1, 3, 5, 7, 9};  
        int target = 5;  
        int result = binarySearch(array, target);  
  
        if (result == -1) {  
            System.out.println("Element not found");  
        } else {  
            System.out.println("Element found at index " + result);  
        }  
    }  
}

在这个示例中,binarySearch方法接收一个有序数组array和要查找的目标元素target。然后,使用循环进行二分查找,将搜索范围不断缩小,直到找到目标元素或确定该元素不存在于数组中。如果找到目标元素,返回其索引,否则返回-1。

在main方法中,我们定义一个数组和一个目标元素,然后调用binarySearch方法并打印结果。

六、解题思路

  1. 第一行输入种树的坐标数量;
  2. 第二行输入树的坐标位置,通过java8 Stream表达式(简洁/方便/上档次)快速拆解输入行;
  3. 对树的坐标位置进行排序;
  4. 第三行输入树苗的数量;
  5. 通过二分查找进行比较;
  6. 取中间位置mid;
  7. 定义变量count,记录植树的总棵数;
  8. 取第一棵树的位置;
  9. 遍历树的坐标位置arr,并记录相对位置;
  10. 输出最佳的最小种植间距。

七、Java算法源码

// 树的坐标位置
public static int[] arr;
// 树苗的数量
public static int num;

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    // 种树的坐标数量
    int n = Integer.valueOf(sc.nextLine());
    // 树的坐标位置
    arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    // 树苗的数量
    num = Integer.valueOf(sc.nextLine());
    // 树的坐标位置排序
    Arrays.sort(arr);

    int min = arr[0];
    int max = arr[n - 1] - arr[0];
    // 通过二分查找进行比较
    while (min < max) {
        // 取中间位置
        int mid = (min + max) / 2;

        if (compare(mid)) {
            min = mid;
        } else {
            max = mid - 1;
        }
    }

    System.out.println(max);
}

public static boolean compare(int mid) {
    // 植树的总棵数
    int count = 1;
    // 第一棵树的位置
    int curPos = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] - curPos >= mid) {
            // 相距位置大于等于 mid,则可以种树
            count++;
            // 相对位置需要改变
            curPos = arr[i];
        }
    }

    return count >= num;
}

八、效果展示

1、输入

7
1 3 6 7 8 11 13
3

2、输出

6

3、说明

三颗树苗分别种在 1、7、13 的位置,可以保证种的最均匀,树苗之间的最小间距为 6。如果选择最小间距为 7,则无法种下3颗树苗。
在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

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

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

在这里插入图片描述

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

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

相关文章

RIP配置与协议分析

一、实验目的&#xff1a; 通过该实验学习RIPv1和RIPv2协议&#xff0c;能够通过GNS3模拟环境并用wireshark抓包分析RIPv1和RIPv2协议的报文格式。 二、预备知识: 三、实验过程&#xff1a; part1: 对GNS3进行配置&#xff0c;配置如下这个实验环境&#xff1a; 操作步骤如下…

【Linux】网络层之IP协议

IP协议 网络层网络层协议的作用IP协议的格式IP协议是如何管理地址的特殊的IP地址公网IP和私网IP 网络层 在整个互联网中&#xff0c;为了能够标识每台机器&#xff0c;所有连接互联网的机器都会被分配一个IP地址&#xff0c;实现端到端之间的数据透明传送&#xff0c;具体功能…

Qt 打开文件列表选择文件

1. 创建 Qt 工程&#xff0c;并添加几个简单控件 这里笔者选用的是 QMainWindow&#xff0c;创建好工程后在 ui 界面设计中添加 QLineEdit、QPushBtton至少这两个控件&#xff0c;如下图摆放。 2. 头文件中添加相关操作 在 mainwindow.h 中添加所要用到的所有头文件。 #incl…

ROS通信机制之话题(Topics)的发布与订阅以及自定义消息的实现

我们知道在ROS中&#xff0c;由很多互不相干的节点组成了一个复杂的系统&#xff0c;单个的节点看起来是没起什么作用&#xff0c;但是节点之间进行了通信之后&#xff0c;相互之间能够交互信息和数据的时候&#xff0c;就变得很有意思了。 节点之间进行通信的一个常用方法就是…

开学季平替电容笔怎么选?性价比电容笔牌子排行

随着暑假的尾声接近&#xff0c;开学季马上就要来了。现在&#xff0c;电容笔已经成为在线办公和在线教育领域的热门产品&#xff0c;平替会代替苹果原有的电容笔吗&#xff1f;实际上&#xff0c;你并不需要花这么多钱去买一个原装的苹果电容笔。一支普通的平替电容笔&#xf…

22-扩展

一 进程与线程;同步与异步任务;宏任务与微任务 一、进程与线程 一个程序只有一个进程,一个进程包含多个线程,单线程和多线程 二、同步与异步任务 同步任务:是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。按顺序执行,可以看做单线程,…

vue-devtools的安装

下载 解压过入目录 进入目录后 不要使用 npm install 会出错的&#xff0c; 我们就用 yarn 来就可以了&#xff0c; npm install -g yarn yarn install yarn run build 等待结束就可以了 进入 packages 找到 shell-chrome 打开 chrome 的扩展工具栏 这样就安装完成了

SEU预推免

目录​​​​​​​ 通信 东南大学 光电效应 外部光电效应 应用实例 内部光电效应 应用实例 内部光电效应型光学传感器 自我介绍 通信 学校网址学院方向ddlresultschedule1⃣️东南大学✅【夏令营】东南大学电子科学与工程学院2023年全国优秀大学生夏令营活动暨2024级…

用python从零开始做一个最简单的小说爬虫带GUI界面(3/3)

目录 上一章内容 前言 出现的一些问题 requests包爬取小说的不便之处 利用aiohttp包来异步爬取小说 介绍 代码 main.py test_1.py test_3.py 代码大致讲解 注意 系列总结 上一章内容 用python从零开始做一个最简单的小说爬虫带GUI界面&#xff08;2/3&#xff09;_…

解放双手!ChatGPT助力编写JAVA框架! | 京东云技术团队

亲爱的Javaer们&#xff0c;在平时编码的过程中&#xff0c;你是否曾想过编写一个Java框架去为开发提效&#xff1f;但是要么编写框架时感觉无从下手&#xff0c;不知道从哪开始。要么有思路了后对某个功能实现的技术细节不了解&#xff0c;空有想法而无法实现。如果你遇到了这…

云LIS云实验室信息管理系统源码,支持IIS独立部署,Docker部署

云LIS技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Redis等。 云LIS系统是医院信息管理的重要组成部分之一&#xff0c;它是一个基于B/S架构开发的实验室信息管理系统。整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件&#xff0c;有外…

和机器人抢工作 人类有哪些优势无法取代?

人工智能越来越有益处&#xff0c;并且广泛应用&#xff0c;世界各地的人们开始担心&#xff0c;自动化的新时代会如何影响自己的职业前景。 皮尤研究中心&#xff08;Pew Research&#xff09;最近的一项研究发现&#xff0c;在10个发达和新兴经济体国家中&#xff0c;大部分…

Rocket消息存储

一、存储介质 ● 关系型数据库DB Apache下开源的另外一款MQ—ActiveMQ (默认采用的KahaDB做消息存储)可选用JDBC的方式来做消息持久化&#xff0c;通过简单的xmI配置信息即可实现JDBC消息存储。由于&#xff0c;普通关系型数据库(如Mysql)在单表数据量达到千万级别的情况下&a…

API数据接口该怎么对接

随着互联网和移动互联网的发展&#xff0c;API&#xff08;Application Programming Interface&#xff09;接口的作用越来越重要。API接口将各种平台相互连接&#xff0c;使得不同系统的信息可以互相获取和使用&#xff0c;大大提高了系统的互操作性和开发效率。本文将介绍如何…

Delphi 中接口实现:Implementing Interfaces

目录 一、类声明&#xff08;Class Declarations&#xff09; 二、方法解决说明&#xff08;Method Resolution Clause&#xff09; 三、更改继承实现&#xff08;Changing Inherited Implementations&#xff09; 四、通过委托实现接口&#xff08;Implementing Interface…

决策树算法:随机森林民主算法【02/2】

决策树民主&#xff1a;随机森林算法 一、介绍&#xff1a; 记住您在阅读亚马逊上的所有评论后进行的最后一次购买&#xff0c;或者在查看 IMDb 评级后您观看的以前的电影。人类是社会动物&#xff0c;他人的意见和行为自然会影响我们。我们的决定在很大程度上取决于“群体智慧…

书单背景图片哪里找?如何制作成视频?

有没有小伙伴们发现&#xff0c;如今很多热门的短视频平台有很多使用书单文案制作的视频&#xff0c;很多情感博主会配上一些精致的图片&#xff0c;唯美的背景承载着一些美好的文案内容。这种类型的视频让不少的小伙伴都想制作专属于自己的视频来投稿&#xff0c;那么小伙伴们…

泡泡玛特上半年收入超28亿元 净利润超去年全年

8月22日&#xff0c;泡泡玛特发布2023中期业绩。数据显示&#xff0c;上半年实现营收28.14亿元&#xff0c;经调整净利润5.35亿元&#xff0c;同比增长42.3%&#xff0c;其中净利润4.77亿元&#xff0c;超去年全年净利润。海外业务延续高速增长态势并首次披露利润情况&#xff…

FOC控制框架图

pmsm电机数学模型以及FOC控制框图&#xff08;开源小项目FOC控制BLDC电机&#xff09;_foc 框图_栋哥爱做饭的博客-CSDN博客 电机控制----FOC框架讲解_foc电机控制_修才生的博客-CSDN博客

pdf编辑文字怎么编辑?这几种简单编辑方法看一看

pdf编辑文字怎么编辑&#xff1f;PDF文件是一种普遍的文档格式&#xff0c;但是在编辑时却比较困难。幸运的是&#xff0c;有许多PDF编辑器可以帮助我们轻松地编辑PDF文件。本文将介绍一些简单的PDF编辑方法&#xff0c;跟着我一起来看看吧&#xff01; 第一种方法&#xff1a;…