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

news2024/11/23 9:40:07

在这里插入图片描述

一、题目描述

某农村主管理了一大片果园,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) {
        // 无法在规定天数内完成施肥任务,输出 -1
        return -1;
    // 如果需要完成施肥任务的天数等于果园数量
    } else if (days === m) {
        // 直接输出最大果园面积 maxFields
        return maxFields;
    } else {
        // 计算最小施肥机的能效 k
        return getMin(maxFields, fields, days);
    }
}

// 计算最小施肥机的能效
// 使用二分查找来确定最小施肥机的能效
function getMin(max, fields, days) {
    // 初始化二分查找的起始值
    let start = 1;
    // 终止值 end 为 max
    let 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 更新为 mid
        if (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.coloradmin.cn/o/636218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Reinforce算法原理及Tensorflow代码实现

Q-learning和DQN算法都是强化学习中的Value-based的方法&#xff0c;它们都是先经过Q值来选择动作。强化学习中还有另一大类是策略梯度方法&#xff08;Policy Gradient Methods&#xff09;。Policy Gradient 是一类直接针对期望回报&#xff08;Expected Return&#xff09;通…

电气火灾监控系统如何有效的预防木材加工企业电气火灾隐患

摘要&#xff1a;本文分析了木材加工企业的特点、现状及常见电气火灾隐患&#xff0c;提出了消灭电气火灾隐患的措施。结尾介绍了木材加工企业常用电气设备的选用及电气火灾监控系统在其低压配电系统的应用方案及产品选型。 关键词&#xff1a;木材加工企业&#xff1b;电气火…

网络服务——DHCP服务

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。 个人主页&#xff1a;小李会科技的…

我和老刘又被搞惨了

前两天在调试PHY的时候遇到了一堆问题&#xff0c;老刘都不耐其烦的搞定了&#xff0c;这次我们开始调试音频部分&#xff0c;音频部分很简单&#xff0c;无非就是录音&#xff0c;要是能把录音的音频拿到了&#xff0c;那就万事大吉了。老刘也是信心满满&#xff0c;老刘对我说…

操作系统性能提升之内核锁优化

性能为王&#xff0c;系统的性能提升是每一个工程师的追求。目前&#xff0c;性能优化主要集中在消除系统软件堆栈中的低效率上或绕过高开销的系统操作。例如&#xff0c;内核旁路通过在用户空间中移动多个操作来实现这个目标&#xff0c;还有就是为某些类别的应用程序重构底层…

提升效率,从这款智能挂灯开始

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

华为项目经理就是CEO,华为对项目经理的要求是什么?

项目经理要向上发展&#xff0c;下面我们来看看华为对项目经理的要求。 原文出自&#xff1a;pmo前沿

太空大战-第14届蓝桥杯国赛Scratch真题中级组第6题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第148讲。 太空大战&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程中级组真题第6题&am…

Flume学习---3、自定义Interceptor、自定义Source、自定义Sink

1、自定义Interceptor 1、案例需求 使用 Flume 采集服务器本地日志&#xff0c;需要按照日志类型的不同&#xff0c;将不同种类的日志发往不同的分析系统。 2、需求分析 在实际的开发中&#xff0c;一台服务器产生的日志类型可能有很多种&#xff0c;不同类型的日志可能需要发…

【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例

1、微信接口说明&#xff1a; 2、调用示例 /*** 上传图文消息内的图片获取URL** param image* return*/PostMapping("uploadImg")public String uploadImg(MultipartFile image) {return wechatOpenService.uploadImg(image);}/*** 上传图文消息内的图片获取URL* htt…

css魔法:伪元素content内容竟然可以用css函数!

&#x1f33b; 前言 CSS 伪元素用于设置元素指定部分的样式。伪元素中 ::before 和 ::after 是最常用的&#xff0c;它们分别用于在dom元素前/后插入内容&#xff0c;本文内容就是关于 ::before 和 ::after 的 content 内容的一些冷门用法展开的。 一般我们在使用伪元素时&…

基于Java+jsp+servlet的养老院管理系统设计和实现《收藏版》

基于Javajspservlet的养老院管理系统设计和实现《收藏版》 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方…

大麦生成链接 大麦生成订单截图 抢票成功截图

一键生成购票链接 一键生成订单截图 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

微服务工程搭建过程中的注意点

1、父工程pom.xml文件 1&#xff1a;父工程的maven坐标&#xff1b; 2&#xff1a;packaging使用pom&#xff1b; 原因&#xff1a;在Spring Cloud微服务工程中&#xff0c;通常会采用多模块的方式进行开发&#xff0c;父工程的pom文件中的packaging标签设置为pom&#xff0c;是…

操作系统 | 知识梳理 | 复习(上)

目录 &#x1f4da;操作系统概述 &#x1f407;操作系统中的抽象概念 &#x1f4da;准备知识 &#x1f407;中断输入输出 &#x1f407;软件中断 &#x1f407;处理器特权级 &#x1f407;操作系统的结构 &#x1f4da;程序的结构 &#x1f407;运行时视图简介 &…

SQL语句中EXISTS的详细用法大全

SQL语句中EXISTS的详细用法大全 前言一、建表1.在MySQL数据库建表语句2.在ORACLE数据库建表语句 二、在SELECT语句中使用EXISTS1.在SQL中使用EXISTS2.在SQL中使用NOT EXISTS3.在SQL中使用多个NOT EXISTS4.在SQL中使用多个EXISTS5.在SQL中使用NOT EXISTS和EXISTS 三、在DELETE语…

jmeter非gui运行,jtl生成了,但是html报告没有生成

jmeter非gui运行&#xff0c;jtl生成了&#xff0c;但是html报告没有生成&#xff0c;查看log&#xff0c;内容如下&#xff1a; 22:45:00,913 ERROR o.a.j.JMeter: Error generating dashboard: org.apache.jmeter.report.dashboard.GenerationException: Error while proces…

谷歌的passkey是什么?

谷歌的passkey是什么&#xff1f; 谷歌正在研发一种名为“Passkey”的新技术&#xff0c;它将用于用户身份验证。Passkey不同于传统的密码&#xff0c;它采用了硬件加密密钥&#xff08;如安全密钥或生物识别方式&#xff09;以及双因素身份验证等技术&#xff0c;可以更好地保…

微信:把元宇宙装进小程序

作为月活13.09亿的国民级应用&#xff0c;微信的每次小升级都很容易形成现象级。2023开年&#xff0c;微信放大招&#xff0c;试图把元宇宙装进小程序。 微信小程序 XR-FRAME 不久前&#xff0c;微信官方在开放社区贴出了“XR-FRAME”开发指南&#xff0c;这是一套为小程序定制…

RocketMQ 快速入门教程,手把手教教你干代码

目录 RocketMQ定义为什么要用消息中间件&#xff1f;应用解耦流量削峰数据分发 RocketMQ各部分角色介绍NameServer主机(Broker)生产者(Producer)消费者(Consumer)消息(Message) 使用RocketMQ的核心概念主题(Topic)消息队列(Message Queue)分组(Group)标签(Tag)偏移量(Offset) 普…