【华为OD题库-003】最佳植树距离-Java
题目
小明在直线的公路上种树,现在给定可以种树的坑位的数星和位置,以及需要种多少棵树苗,问树苗之间的最小间距是多少时,可以保证种的最均匀(两棵树苗之间的最小间距最大)
输入描述
输入三行:
第一行一个整数:坑位的数量
第二行以空格分隔的数组:坑位的位置
第三行一个整数:需要种植树苗的数量
输出描述
树苗之间的最小间距
示例1:
输入∶
7
1 3 6 7 8 11 13
3
输出:
6
三颗树苗分别种在1、7、13的位置,可以保证种的最均匀,树苗之间的最小间距为6。
思路
可以使用二分法解决。为了便于描述,设输入的数组为arr,坑位数量为n,需要种植的数为x。
先将arr从小到大排序
两棵树之前的最小间距是L=1,最大间距R=arr[n-1]-arr[0]。
先看最小间距ans取mid=(L+R)/2时,是否可以种下x棵树。如果可以种下,因为要求ans的最大值,那么小于mid时的情况都不用考虑,直接左边界L取mid+1;如果取mid时,种不下x棵树,那么mid右边的肯定更加种不下,右边界R直接取mid-1;通过上述思路,不断缩小查找边界,即可找到最大的ans。
现在的问题在于,对于给定最小间距,怎么判断是否种得下X棵树。已示例数据为例,我们的坑位是:[1,3,6,7,8,11,13]。假设最小间距是4。种树量为cnt。遍历坑位:
假定在1种第一棵树,cnt=1;
3距1的距离是2,小于4,不种;
6距1的距离是5,大于4,种植,cnt=2,后续遍历时就应该以6为参照物;
7距6为1,不种;
8距6位2,不种;
11距6为4,种植,cnt=3,后续以11为参照物;
13距11为2,不种;
遍历结束,所以最小间距是4时,在[1,3,6,7,8,11,13]这种坑位下,最多种3棵树。怎么判断是否种得下X棵树?只需要3>=x即可。
还有一个问题,二分法判断时,while (l <? r),此处是否取等呢?应该要取等,当l==r时,根据上述逻辑,我们会再判断一次mid,即l是否满足条件,满足的话ans最后就会取到l,然后l等于mid+1,结束二分查找。我们举一个例子更能说明情况,假设坑位是1 3 5 7,要种植的树木x是2,执行上述逻辑:
初始状态,l=1,r=6,mid=3,checked(3)时,可以在1,5种2棵树,满足(等于x),l=mid+1=4
l=4,r=6,mid=5,checked(5)时,可以在1,7种2棵树,满足,l=mid+1=6
l=6,r=6,此时如果判定边界不取等,那么就结束二分查找了得到的结果就是5,显然不对。应该在左右边界在相等时,继续判断一次,最后得到结果6。
题解
package hwod;import java.util.Arrays;
import java.util.Scanner;public class PlantTree {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt();int[] grids = new int[m];for (int i = 0; i < m; i++) {grids[i] = sc.nextInt();}int n = sc.nextInt();System.out.println(maxDistance(grids, n));}private static int maxDistance(int[] grids, int n) {Arrays.sort(grids);int l = 1, r = grids[grids.length - 1] - grids[0], ans = -1;while (l <= r) {int mid = l + r >> 1;if (checked(mid, grids, n)) {ans = mid;l = mid + 1;} else {r = mid - 1;}}return ans;}private static boolean checked(int mid, int[] grids, int n) {int pre = grids[0],cnt=1;for (int i = 1; i < grids.length; i++) {if (grids[i] - pre >= mid) {pre = grids[i];cnt++;}}return cnt >= n;}}相关文章:
【华为OD题库-003】最佳植树距离-Java
题目 小明在直线的公路上种树,现在给定可以种树的坑位的数星和位置,以及需要种多少棵树苗,问树苗之间的最小间距是多少时,可以保证种的最均匀(两棵树苗之间的最小间距最大) 输入描述 输入三行: 第一行一个整数:坑位的数…...
Oracle(12)Managing Indexes
目录 目标: 一、基础知识 1、Classification ofindexes 索引的分类 2、B-Tree vs Bitmap 3、Creating Indexes: Guidelines 创建索引:准则 4、Offline Index Rebuild 脱机索引重建 5、RebuildingIndexes 重建索引 6、Online Index Rebuild 在线索引重建 7…...
DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)
文章目录 任务要求原始代码CPP文件代码着色器文件代码 效果展示 任务要求 本篇文章是中国农业大学虚拟现实课程的一次作业内容,需要对五个茶壶模型使用不同的光照进行着色和渲染,然后旋转展示。 本人的代码也是在其他人的代码的基础上修改来的…...
【Verilog 教程】7.3 Verilog 串行 FIR 滤波器设计
串行 FIR 滤波器设计 设计说明 设计参数不变,与并行 FIR 滤波器参数一致。即,输入频率为 7.5 MHz 和 250 KHz 的正弦波混合信号,经过 FIR 滤波器后,高频信号 7.5MHz 被滤除,只保留 250KMHz 的信号。 输入频率&#x…...
用golang实现一个基于interface的多态示例,展示其使用场景和优劣性。
以下是一个简单的基于interface的多态示例,该示例展示了如何通过使用interface来实现多个不同类型的结构体的共同行为。具体示例如下: package mainimport "fmt"type Animal interface {Speak() string }type Dog struct {Name string }func …...
ArcGIS for Android 禁止地图旋转
ArcGIS for Android 禁止地图旋转 话不多说,直接上代码!!! public class LoadMap extends AppCompatActivity {// 地图private MapView mapView;private ArcGISMap map;Overrideprotected void onCreate(Bundle savedInstanceSta…...
freertos静态创建任务
在开始前先有个小插曲,我的keil的自动补全代码功能使用不了,经过查找是因为之前装51把有的文件覆盖了,照这篇博客就可以解决。 然后之前那份代码我们是动态创建任务,先来说一下动态创建任务和静态创建任务的区别: Fre…...
VBA根据Excel内容快速创建PPT
示例需求:根据Excel中选中的单元格内容(3列)如下图所示,在已打卡的PowerPoint文件中创建页面。 新增PPT Slide页面使用第二个模板页面,其中包含两个文本占位符,和一个图片占位符。将Excel选中区域中前两列写…...
服务器操作系统有哪些
服务器操作系统有哪些 电脑想要运行就离不开操作系统,而服务器想要正常运行同样也离不开操作系统,那你知道服务器系统有哪些?服务器系统与电脑系统有什么区别?这些问题就由壹基比小鑫在下文中来告诉大家。 服务器系统有哪些&…...
泄漏检测与修复(LDAR)过程管控平台(销售出租)VOCs便携式总烃分析仪(销售出租)
LDAR是Leak Detection and Repair(泄漏检测与修复)的缩写,也是国际上较先进的化工废气检测技术。LDAR主要通过检测化工企业原料输送管道、泵、阀门、法兰等易产生易产生挥发性有机物(简称VOCs)泄漏的部位,并…...
VueX 模块化和namespace
当我们的项目很大的时候,VueX中的代码会越来越多,会有处理数据的,处理人员列表的,处理订单的... 如果我们将这些东西都写在一个state、actions和mutations中的话,就非常不方便后期的维护。 所以我们引入了VueX的模块…...
7-4 修理牧场 分数 15
#include<iostream> #include<queue> using namespace std; #define maxn 10005int main() {int n 0, data 0;cin >> n;//建小堆: //上调建堆中用greater: 父大子小 父子交换 小的上去 大的下去 priority_queue<int, vector<int>, greater<int…...
自定义element-ui plus 函数式调用,在API,js中直接使用全局组件
npm方式: npm install -D unplugin-vue-components unplugin-auto-import yarn 方式 : yarn add unplugin-vue-components; yarn add unplugin-auto-import; 使用官方的这个: vite.config.js中配置 plugins: [vue(),AutoImport({resolvers: [ElementPlusResolve…...
[LeetCode]-876.链表的中间结点-206.反转链表-21.合并两个有序链表-203.移除链表元素
目录 876.链表的中间结点 题目 思路 代码 206.反转链表 题目 思路 代码 21.合并两个有序链表 题目 思路 代码 203.移除链表元素 题目 思路 代码 876.链表的中间结点 876. 链表的中间结点 - 力扣(LeetCode)https://leetcode.cn/problems/mi…...
通过git多人协调开发
多人协调开发过程中的问题解决。 1.新建远程的仓库分支; 2.拉取线上代码,并在VScode中打开; 3 拉完之后,打开VScode之后的左下角显示的就是当前分支的名称,点击之后即可随意切换; 4 创建本地分支࿰…...
CentOS 7 通过 yum 安装 MariaDB(Mysql)
这一版取消了修改配置的操作,改成每次创建数据库时手动指定字符集编码;这一版取消了修改密码的操作,保留 MariaDB 使用无密码的情况,即密码是 ""。 安装步骤: 以下操作都以 root 用户进行操作 以下操作都以 …...
【Solidity】Remix在线环境及钱包申请
好久没有学习区块链方面的知识了,目前通过自学大致掌握了Fabric联盟链的搭建,链码编写、部署,api调用,可以独立开发出一些基于fabric的应用,感觉开发出去中心化的应用还是很有意思的,因为他与之前开发的ssm…...
ARFoundation系列讲解 - 92 涂鸦效果
--- 视频来源于网络,如有侵权必删 --- 案例中使用的软件版本 Unity2023.1.17.f1c1ARFoundtaion 5.1.0Apple ARKit XR Plugin 5.1.0 Google ARCore XR Plugin 5.1.0技术分析 我们可以实时检测用户手指触摸的屏幕位置,从触摸位置投射一条射线(Raycast),再射线命中的目标位置…...
立创eda专业版学习笔记(8)(运行模式)
以前没注意过这个问题,我有2台电脑,都能登录eda专业版,但是一台是全在线模式,另外一台是半离线模式,虽然是同一个账号,但是打开里面的工程会发现,两边的工程完全不同,因为一台的工程…...
349.两个数组的交集+350.两个数组的交集II(set/multiset)
目录 一、349.两个数组的交集 二、350.两个数组的交集II 一、349.两个数组的交集 349. 两个数组的交集 - 力扣(LeetCode) class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {//…...
element-plus主题换色
提示:本篇暂未完善全,仅仅提供思路 具体的实现可以参考我这篇文章,验证可行:推荐使用该链接方式实现换色 主题方式是通过切换主题的方式实现换色,例如blue、green,不推荐,仅参考逻辑。 原因&a…...
Linux查看文件内容
🏷️ 标签:Linux 查看文件 文件类型 Linux命令 运维 后端开发 📝 适用人群:Linux 新手、运维、后端、学生、实训使用 💡 亮点:包含 查看文件类型 查看整个文件 查看部分文件,结构清晰、示例可…...
如何用Matlab SPOD工具快速分析流体动力学模态:完整指南
如何用Matlab SPOD工具快速分析流体动力学模态:完整指南 【免费下载链接】spod_matlab Spectral proper orthogonal decomposition in Matlab 项目地址: https://gitcode.com/gh_mirrors/sp/spod_matlab 你是不是经常面对海量的流体动力学数据感到无从下手&a…...
LiveSplit终极指南:为速度跑者量身定制的精准计时神器
LiveSplit终极指南:为速度跑者量身定制的精准计时神器 【免费下载链接】LiveSplit A sleek, highly customizable timer for speedrunners. 项目地址: https://gitcode.com/gh_mirrors/li/LiveSplit LiveSplit是一款专为速度跑者打造的轻量级、高度可定制的计…...
如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案
如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案 【免费下载链接】LegacyUpdate Get back online, activate, and install updates on your legacy Windows PC 项目地址: https://gitcode.com/gh_mirrors/le/LegacyUpdate 还在为Windows X…...
为Claude Code配置Taotoken聚合API密钥与Base地址避免封号风险
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken聚合API密钥与Base地址避免封号风险 在使用Claude Code这类编程助手工具时,开发者有时会遇到…...
Midjourney V6色调分离失效?3步修复色相断层、5类常见错误代码级诊断指南
更多请点击: https://kaifayun.com 第一章:Midjourney V6色调分离失效的本质归因 Midjourney V6 引入了更严格的色彩空间一致性约束与隐式色彩嵌入机制,导致传统依赖 HSV/HSL 分量操控的“色调分离”(Color Separation࿰…...
中年以后,真正有效的抗衰老运动,其实就这 4 种
过了 30 岁,肌肉每年流失 1%-2%,基础代谢下降,精力大不如前——这不是错觉,是生理规律。 但运动的选择,决定了你是「老得快」还是「逆生长」。分享 4 种被科学验证的抗衰老运动,中年人越早开始越好。 1️⃣…...
3步搞定Photoshop图层批量导出:高效工具终极指南
3步搞定Photoshop图层批量导出:高效工具终极指南 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Adobe. 项目地址: https://…...
BilibiliDown音频提取技术指南:Java实现与配置深度解析
BilibiliDown音频提取技术指南:Java实现与配置深度解析 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...
