华为OD机考:统一考试 D卷 + C卷 + B卷 +A卷
真题目录:华为OD机考机试 真题目录(C卷 + D卷 + B卷 + A卷) + 考点说明
题目描述
机器人搬砖,一共有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
循环执行二分查找。这个循环将不断缩小搜索范围直到找到最小的每小时能量块数量。 -
在每次循环中,计算中间值
m