【华为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) {//…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
