华为OD机考:OD统一考试D卷+C卷+A卷+B卷+刷题OJ
真题目录:真题目录(D卷 + C卷 + B卷 + A卷) + 考点说明
必刷专栏:最新2024华为OD机试(Java/JS/Py/C/C++)+ OJ
在线OJ :点击立即刷题,模拟真实机考环境
华为OD面试真题精选:华为OD面试真题精选
题目描述
机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头,要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格每小时补充一次且能量格只在这一个小时有效,为使得机器人损耗最小化尽量减小每次补充的能量格数 为了保障在8小时内能完成搬砖任务,请计算每小时给机器人充能的最小能量格数。
1、无需考虑机器人补充能量格的耗时,
2、无需考虑机器人搬砖的耗时;
3、机器人每小时补充能量格只在这一个小时中有效;
输入描述
第一行为一行数字,空格分隔
输出描述
机器人每小时最少需要充的能量格,若无法完成任务,输出 -1
示例1
输入 | 30 12 25 8 19 |
---|---|
输出 | 15 |
示例2
输入 | 10 12 25 8 19 8 6 4 17 19 20 30 |
---|---|
输出 | -1 |
解题思路
-
首先,检查砖块的数量是否大于8,如果大于8,则返回-1。在本例中,砖块数量为5,因此不返回-1。
-
初始化左右边界
left
和right
。left
设置为1(因为至少需要每小时1块能量),right
设置为数组中的最大值(即30)。 -
进入
while
循环执行二分查找。这个循环将不断缩小搜索范围直到找到最小的每小时能量块数量。 -
在每次循环中,计算中间值
middle
,然后计算使用middle
作为每小时能量块数量时,完成搬运所有砖块需要的总时间total_time
。 -
如果
total_time
大于hours
,说明middle
太小,不能在规定时间内完成任务,因此将left
设置为middle + 1
。 -
如果
total_time
小于等于