如何在华为OD机试中获得满分?Java实现【不爱施肥的小布】一文详解!

news/2025/1/15 21:54:02/

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1、题目描述
  • 2、输入描述
  • 3、输出描述
  • 4、Java算法源码
  • 5. 测试
  • 6.解题思路

1、题目描述

某农村主管理了一大片果园,fields[i]表示不同国林的面积,单位m2,现在要为所有的果林施肥且必须在n天之内完成,否则影响收成。小布是国林的工作人员,他每次选择一片果林进行施肥,且一片国林施肥完后当天不再进行施肥作业。

假设施肥机的能效为K,单位:m2/day,请问至少租赁能效K为多少的施肥机才能确保不影响收成?如果无法完成施肥任务,则返回-1。

2、输入描述

第一行输入为m和n,m表示fields中的元素个数,n表示施肥任务必须在n天内(含n天)完成;

第二行输入为fields,fields[i]表示果林i的面积,单位:m2。

3、输出描述

对于每组数据,输出最小施肥机的能效k,无多余空格。

补充说明:

1 <= fields.length <= 104
1 <= n < 109
1<= fields[i] <= 109

4、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt();int days = sc.nextInt();int[] fields = new int[m];for (int i = 0; i < m; ++i) {fields[i] = sc.nextInt();}int maxFields = fields[0];for (int i = 0; i < m; ++i) {maxFields = Math.max(maxFields, fields[i]);}if (days < m) {System.out.println(-1);} else if (days == m) {System.out.println(maxFields);} else {System.out.println(getMin(maxFields, fields, days));}
}public static int getMin(int max, int[] fields, int days) {int start = 1;int end = max;while (start + 1 < end) {int mid = (start + end) / 2;int sumDays = 0;for (int i = 0; i < fields.length; ++i) {if (fields[i] % mid == 0) {sumDays += fields[i] / mid;} else {sumDays += (fields[i] / mid) + 1;}}if (sumDays > days) {start = mid;} else {end = mid;}}return start + 1;
}

5. 测试

在这里插入图片描述

6.解题思路

  1. 首先读取输入的果园数量 m 和需要完成施肥任务的天数 days
  2. 使用循环读取果园面积,将其存储在整数数组 fields 中。
  3. 找到果园面积的最大值,用变量 maxFields 记录。
  4. 根据给定的条件进行判断:
    • 如果需要完成施肥任务的天数小于果园数量,即 days < m,则无法在规定天数内完成施肥任务,输出 -1。
    • 如果需要完成施肥任务的天数等于果园数量,即 days == m,则直接输出最大果园面积 maxFields
    • 否则,调用 getMin() 方法计算最小施肥机的能效 k,并输出结果。
  5. 在 getMin() 方法中,使用二分查找来确定最小施肥机的能效 k。
    • 初始化二分查找的起始值 start 为 1,终止值 endmaxFields
    • 进入循环,直到 start + 1 < end,每次迭代都更新 midstartend 的中间值。
    • 在每次迭代中,计算使用当前的 mid 值时所需的总天数 sumDays
    • 遍历果园面积数组 fields,对于每个果园面积,根据能效 mid 计算所需的天数,并累加到 sumDays 中。
    • 如果 sumDays 大于给定的天数 days,说明当前的 mid 值太小,需要增大能效,将 start 更新为 mid
    • 否则,将 end 更新为 mid
  6. 返回 start + 1,即为最小施肥机的能效 k
    在这里插入图片描述

http://www.ppmy.cn/news/97094.html

相关文章

如何从宏观层面构建优秀的大语言模型

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

软考A计划-试题模拟含答案解析-卷五

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

ChatGPT原理简介

承接上文GPT前2代版本简介 GPT3的基本思想 GPT2没有引起多大轰动&#xff0c;真正改变NLP格局的是第三代版本。 GPT3训练的数据包罗万象&#xff0c;上通天文下知地理&#xff0c;所以它会胡说八道,会说的贼离谱&#xff0c;比如让你穿越到唐代跟李白对诗&#xff0c;不在一…

17个新手常见的Python运行错误

当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 “SyntaxError :invalid syntax”) 2)使用 = 而不是 ==(导致“Sy…

Git remote 及 提交操作步骤

Git remote 及 社区提交操作 git remote 本地仓库和远程仓库 repositorygit remote -vtgit remote addgit remote add local [本地仓库路径]git remote rm [远程仓库名] git fetchgit fetchgit fetch [remote_repository]git fetch [remote_repository] [remote_branch_name]FE…

考研C语言第五章

5.2 数组基础知识 注意要点&#xff1a; 1.下标0开始 2.没有定义的地方是0 5.3 数组访问越界与数组传递 访问越界&#xff0c;定义超过前面定义的数组长度&#xff0c;占据了后面定义数据的地方 非常危险&#xff01; 在循环里面往往容易造成越界 数组传递 1.函数引用时…

HDFS基础架构以及部署

HDFS基础架构以及部署 一、HDFS基础简介 什么是HDFS HDFS全称&#xff1a;Hadoop Distributed File System是Hadoop三大组件&#xff08;HDFS,MapReduce,YARN&#xff09;之一可在多台服务器上构建集群&#xff0c;提供分布式数据存储能力 HDFS中的架构角色有哪些 NameNode&a…

Mybatis 框架 ( 三 ) Mybatis-Plus

4.Mybatis-plus 官网 : https://www.baomidou.com/ MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上封装了大量常规操作&#xff0c;减少了SQL的编写量。 4.1.Maven依赖 使用时通常通过Springboot框架整合使用 并且使用Lombok框架简化实体类 <…