华为OD机试真题 JavaScript 实现【不爱施肥的小布】【2023Q1 100分】

news/2024/11/25 13:17:59/

在这里插入图片描述

一、题目描述

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

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

二、输入描述

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

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

三、输出描述

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

补充说明:

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

四、解题思路

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

五、JavaScript算法源码

/*** @param m 果园数量* @param days 需要完成施肥任务的天数* @param input 使用循环读取果园面积*/
function calculate(m, days, input) {const fields = input.split(" ");let maxFields = fields[0];for (let i = 0; i < m; i++) {maxFields = Math.max(maxFields, fields[i]);}// 如果需要完成施肥任务的天数小于果园数量if (days < m) {// 无法在规定天数内完成施肥任务,输出 -1return -1;// 如果需要完成施肥任务的天数等于果园数量} else if (days === m) {// 直接输出最大果园面积 maxFieldsreturn maxFields;} else {// 计算最小施肥机的能效 kreturn getMin(maxFields, fields, days);}
}// 计算最小施肥机的能效
// 使用二分查找来确定最小施肥机的能效
function getMin(max, fields, days) {// 初始化二分查找的起始值let start = 1;// 终止值 end 为 maxlet end = max;// 每次迭代都更新 mid 为 start 和 end 的中间值while (start + 1 < end) {const mid = Math.floor((start + end) / 2);let sumDays = 0;// 对于每个果园面积,根据能效 mid 计算所需的天数,并累加到 sumDays 中for (let i = 0; i < fields.length; i++) {if (fields[i] % mid === 0) {sumDays += fields[i] / mid;} else {sumDays += Math.floor(fields[i] / mid) + 1;}}// 如果 sumDays 大于给定的天数 days,说明当前的 mid 值太小,// 需要增大能效,将 start 更新为 midif (sumDays > days) {start = mid;} else {end = mid;}}return start + 1;
}

六、效果展示

1、输入

5 9
5 6 7 8 9

2、输出

5

3、说明

当能效为5时,fields[0]需要1天,fields[1]需要2天,fields[2]需要2天,fields[3]需要2天,fields[4]需要2天,一共需要9天,不会影响收成。

在这里插入图片描述


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


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

相关文章

安装VastBase G100 v2.2 Build 12

1、防火墙设置 1.1 关闭防火墙和selinux 1.1.1 关闭防火墙 systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld1.1.2 关闭selinux vim /etc/selinux/config1.2 修改hosts文件,添加实际的IP地址和主机名 vi /etc/hosts 1.3…

U盘打不开?恢复u盘,3招解决!

案例&#xff1a;u盘插入电脑后一点反应都没有&#xff0c;这是为什么呢&#xff1f;u盘打不开怎么办&#xff1f; 【我将u盘插入电脑后u盘显示无法打开&#xff0c;为什么会出现这种情况呢&#xff1f;遇到u盘打不开的情况应该怎么办呢&#xff1f;】 经常使用u盘存储文件的朋…

c++ 连sqlserver

//要在 C 中连接 SQL Server 数据库&#xff0c;可以使用 Microsoft 提供的 SQL Server Native Client 或者 //ODBC 驱动程序。以下是使用 SQL Server Native Client 连接数据库的基本步骤&#xff1a; //1. 安装 SQL Server Native Client 驱动程序。 //2. 在 C 代码中包含头…

@足智多谋的你,联网智能门锁试卷(2023高考版)正式发布!

千淘万漉虽辛苦&#xff0c;吹尽狂沙始到金。2023年的高考已于上周正式结束。湖南省高考成绩和录取控制分数线将在6月25日正式公布。广大学子历经一千多个日夜的努力&#xff0c;即将在这一天见证结果。 其实&#xff0c;当我们真正走出校园才发现&#xff0c;学无止境&#x…

【数据可视化】Plotly Express绘图库使用

Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观&#xff0c;无需繁琐的设置和配置。通过使用Plotly Express&#xff0c;您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势&#xf…

GMQ Wallet致力于成为您专属的保险柜

GMQ Wallet致力于成为您专属的保险柜 每当进行数字资产投资时&#xff0c;我们不能仅仅依靠交易所来存储数字资产&#xff0c;我们更需要有个自己的数字钱包&#xff0c;来存储属于我们个人的数字资产&#xff0c;了解“区块链数字钱包”&#xff08;以下简称钱包&#xff09;的…

app保险箱,保险箱登录注册,添加保险箱子,实现对保险箱的监听。

![广告页![](https://img-blog.csdnimg.cn/20190322155807127.jpg?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpbmdxaW5nZmFmYQ,size_16,color_FFFFFF,t_70)

IPFS为什么被学者称为数据的“黄金保险柜”?

现代社会信息技术的发展以及人类生活的智能化&#xff0c;让数据爆炸性的增长&#xff0c;数据信息的存储利用也受到越来越多人的重视。 根据物理存储形态&#xff0c;数据存储可分为集中式存储与分布式存储两种。 集中式存储指整个存储是集中在一个系统中的&#xff0c;很容易…