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

news/2024/7/20 17:34:47 标签: 华为od, 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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。


http://www.niftyadmin.cn/n/5277082.html

相关文章

持续集成交付CICD:HELM 手动完成前端项目应用发布与回滚

目录 一、实验 1.环境 2.K8S master节点部署HELM3 3.K8S master节点安装git 4. Harbor镜像确认 5. HELM 手动完成前端项目应用发布与回滚 6.代码上传到GitLab 二、问题 1.Ingress中 path 的类型有何区别 2. HELM创建项目报错 一、实验 1.环境 &#xff08;1&#x…

使用汇编和反汇编引擎写一个x86任意地址hook

最简单的Hook 刚开始学的时候&#xff0c;用的hook都是最基础的5字节hook&#xff0c;也不会使用hook框架&#xff0c;hook流程如下&#xff1a; 构建一个jmp指令跳转到你的函数(函数需定义为裸函数)保存被hook地址的至少5字节机器码&#xff0c;然后写入构建的jmp指令接着在…

vuejs/devtools本地安装

1、GitHub下载vuejs/devtools: GitHub - vuejs/devtools 2、解压main分支下载的文件 3、运行yarn install 和 yarn build 4、得到shell-chrome文件&#xff08;不运行3也有这个文件&#xff0c;不过不起作用&#xff09;&#xff0c;把shell-chrome文件夹拷贝到D:\Program Fi…

android studio gradle下载不下来问题

使用腾讯镜像 地址&#xff1a; https\://mirrors.cloud.tencent.com/gradle/ 把 gradle.properties 里面地址修改为&#xff1a; distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-4.6-…

Graylog配置GraylogSidecar-传输日志文件

1.GraylogSidecar概述 Graylog Sidecar 是 Graylog 日志管理系统的一个组件&#xff0c;用于配置和管理通过 Filebeat、Winlogbeat、NXLog 或其他日志收集器发送的日志流。它的作用是管理和配置这些日志收集器&#xff0c;确保它们正确地发送日志数据到 Graylog 服务器。 我用的…

sklearn多项式回归和线性回归

什么是线性回归&#xff1f; 回归分析是一种统计学方法&#xff0c;用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法&#xff0c;可以帮助我们预测和解释变量之间的相互作用。 回归分析通常用于预测一个或多个因变量的值&#xff0c;这些因变量的值是由一个或多…

使用包、Crate 和模块管理项目(下)

1、使用 use 关键字将路径引入作用域 在之前的示例中我们引用模块中的函数或者结构体之类的&#xff0c;都是需要用到相对路径或者绝对路径去引用&#xff0c;然尔在这里&#xff0c;有一种方法可以简化这个过程。我们可以使用 use 关键字创建一个短路径&#xff0c;然后就可以…

大数据----33.hbase中的shell文件操作

HBase的命令行工具&#xff0c;最简单的接口&#xff0c;适合HBase管理使用&#xff0c;可以使用shell命令来查询HBase中数据的详细情况。 注意&#xff1a;如果进入hbase后长时间不操作&#xff1b; 发生hbase自动关闭没有了进程&#xff1b; 原因是内存不够&#xff1b;可以关…