【华为OD题库-104】猴子吃桃-java

题目

题目描述:

孙悟空喜欢吃蟠桃,一天他乘守卫蟠桃园的天兵天将离开了而偷偷的来到王母娘娘的蟠桃园偷吃蟠桃。

已知蟠桃园有棵蟠桃树,第i棵蟠桃树上有Ni个蟠桃,天兵天将将在H(不小于蟠桃树棵数)小时后回来。

孙悟空可以决定他吃蟠桃的速度K(单位:个小时),每个小时他会选择一颗蟠桃树,从中吃掉K个蟠桃,如果这棵树上的蟠桃数小于K,他将吃掉这棵树上所有蟠桃,然后这一小时内不再吃其余蟠桃树上的蟠桃。

孙悟空喜欢慢慢吃,但仍想在天兵天将回来前将所有蟠桃吃完。

求孙悟空可以在H小时内吃掉所有蟠桃的最小速度K(K为整数)。
输入描述:

从标准输入中读取一行数字,前面数字表示每棵数上蟠桃个数,最后的数字表示天兵天将将离开的时间。
输出描述:

吃掉所有蟠桃的最小速度K(K为整数)或输入异常时输出-1。
示例1:

输入

3 11 6 7 8

输出

4
说明:

天兵天将8个小时后回来,孙悟空吃掉所有蟠桃的最小速度4。

第1小时全部吃完第---棵树,吃3个,

第2小时吃4个,第二棵树剩7个,

第3小时吃4个,第二棵树剩3个,

第4小时吃3个,第二棵树吃完,

第5小时吃4个,第三棵树剩2个,

第6小时吃2个,第三棵树吃完,

第7小时吃4个,第4棵树剩3个,

第8小时吃3个,第4棵树吃完。

思路

同leetcode 875. 爱吃香蕉的珂珂

区别在于需要判定-1的情况(输入异常),如果输入的数组长度为1或者,天兵天将回来的时间过早,直接输出-1

题解

java 复制代码
package hwod;

import java.util.Arrays;
import java.util.Scanner;

public class MonkeyPeach {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        System.out.println(monkeyPeach(nums));
    }

    private static int monkeyPeach(int[] nums) {
        int target = nums[nums.length - 1];

        int n = nums.length - 1;
        int[] newNums = new int[n];
        if (n <= 0 || target < n) return -1;

        int left = 1, right = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i] > right) right = nums[i];
            newNums[i] = nums[i];
        }

        while (left < right) {
            int mid = left + ((right - left) >> 1);
            int time = getTime(newNums, mid);
            if (time > target) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;
    }

    private static int getTime(int[] newNums, int mid) {
        int res = 0;
        for (int i = 0; i < newNums.length; i++) {
            res += (newNums[i] + mid - 1) / mid;
        }
        return res;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

说明

本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

相关推荐
lulu12165440784 分钟前
大模型API聚合平台技术架构深度对比:六大平台协议转换、路由调度与安全治理全解析 - 微元算力(weytoken)
java·人工智能·安全·架构·ai编程
可乐ea6 分钟前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
記億揺晃着的那天13 分钟前
Windows 通过 Java 获取可用端口的一个坑:Hyper-V 保留端口导致 UDP 绑定失败
java·windows·udp
组合缺一14 分钟前
SolonCode(编码智能体)支持鸿蒙 PC
java·华为·ai·ai编程·harmonyos·solon·soloncode
小bo波16 分钟前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
折哥的程序人生 · 物流技术专研20 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
一个儒雅随和的男子23 分钟前
sentinel底层原理剖析以及实战优化
java·网络·sentinel
两年半的个人练习生^_^29 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言
戳代码的新星36 分钟前
论小白如何学会使用Maven
java·maven
wyhwust36 分钟前
maven的安装和配置
java