食堂供餐 - 二分查找

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、题目描述
  • 二、输入描述
  • 三、输出描述
  • 四、补充说明
  • 四、java代码
  • 五、测试用例


前言

本人最近再练习算法,所以会发布自己的解题思路,希望大家多指教

一、题目描述

某公司员工食堂以盒饭的方式供餐。

为将员工取餐排队时间降为0,食堂的供餐速度必须要足够快。

现在需要根据以往员工取餐的统计信息,计算出一个刚好能达到排队时间为0的最低供餐速度。

即,食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求。

二、输入描述

第一行输入一个正整数N,表示食堂开餐时长。

第二行为一个正整数M,表示开餐前食堂已经准备好的盒饭数量;

第三行为N个正整数,用空格分割,依次表示开餐时间内按时间顺序每个单位时间进入食堂取餐的人数。

三、输出描述

一个整数,能满足题目要求的最低供餐速度。(每个单位时间需要做出多少份盒饭)。

四、补充说明

每人只能取一份盒饭。

需要满足排队时间为0,必须保证取餐员工到达食堂时,食堂库存盒饭数量不少于本次来取餐的人数。

第一个单位时间来取餐的员工只能取开餐前食堂准备好的盒饭。

每个单位时间里制作的盒饭只能供给后续单位时间来的取餐员工。食堂在每个单位时间里制作的盒饭数量是相同的。

四、java代码

	public static void main(String[] args) {Scanner sc = new Scanner(System.in);//获取开餐时长int N = Integer.parseInt(sc.nextLine());//准备好的盒饭数量int M = Integer.parseInt(sc.nextLine());//每个时间段的取餐人数int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//计算总人数int sum = Arrays.stream(arr).sum();//初始化需要备餐的最大速度 = 总人数 - 已备好的盒饭int right = sum - M;//初始化需要备餐的最小速度int left = 0;//采用二分法求出最小速度while (left < right) {int mid = (right + left) / 2;if(dfs(arr,mid,M,N)){right = mid;} else {left = mid + 1;}}System.out.println(left);}private static boolean dfs(int[] arr, int mid, int m, int n) {for (int i = 0; i < n; i++) {//每个时间段生产的只能给下一个时间段的人员使用m -= arr[i];//以 mid/时间段内 速度生产的盒饭数量无法满足当前人数需求if(m < 0){return false;}//下一个时间段的盒饭数量 = 当前时间段消耗剩余的盒饭数 + 当前时间段生产的盒饭数m += mid;}return true;}

五、测试用例

输入:
3
20
15 12 8

输出:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706209.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GESP试卷】2024年03月Scratch三级试卷

2024年GESP03月认证Scratch三级试卷 分数&#xff1a;100 题数&#xff1a;27 一、单选题(共15题&#xff0c;每题2分&#xff0c;共30分) 010203040506070809101112131415CBACADDADCBCBAB 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&…

Java刷题-基础篇

目录 题目1&#xff1a;改变原有数组元素的值 题目2&#xff1a;奇数位于偶数之前 题目3&#xff1a;两数之和 题目4&#xff1a;只出现一次的数字 题目5&#xff1a;多数元素 题目6&#xff1a;存在连续三个奇数的数组 题目1&#xff1a;改变原有数组元素的值 题目详细…

C++基础与函数解析 | 函数的声明与定义 | 函数调用 | 函数详解 | 函数重载 | 重载解析 | 递归函数 | 内联函数 | 函数指针

文章目录 一、函数基础1.基本函数定义2.函数的声明与定义3.函数调用 二、函数详解1.参数2.函数体3.返回类型 三、函数重载与重载解析1.函数重载2.重载解析 四、函数相关的其他内容1.递归函数2.内联函数3.constexpr函数&#xff08;C11起&#xff09;4.consteval 函数 (C20 起 )…

什么是直接内存(NIO)

直接内存不受 JVM 内存回收管理&#xff0c;是虚拟机的系统内存&#xff0c;常见于 NIO 操作时&#xff0c;用于数据 缓冲区&#xff0c;分配回收成本较高&#xff0c;但读写性能高&#xff0c;不受 JVM 内存回收管理。 举例 当上传一个较大文件&#xff08;200M&#xff09;…

构建智能电子商务系统:数字化引领未来商业发展

随着互联网技术的飞速发展和消费者行为的变革&#xff0c;电子商务系统的重要性日益凸显。在这一背景下&#xff0c;构建智能电子商务系统成为推动商业数字化转型的关键举措。本文将深入探讨智能电子商务系统的构建与优势&#xff0c;助力企业把握数字化转型的主动权。 ### 智…

Vue3商城后台管理实战-用户登录界面设计

界面设计 此时界面的预览效果如下&#xff1a; 登录界面的完整代码如下&#xff1a; <script setup> import {reactive} from "vue/reactivity";const form reactive({username: "",password: "", })const onSubmit () > {} <…

位运算概述

首先 位运算这个东西在考试中十分容易考&#xff0c;所以要多多看一看位运算的相关知识&#xff0c;多刷一刷题之类的。 位运算的概念 位运算就是二进制数据进行运算的运算符。 注意&#xff1a;通常我们用二进制补码来表示&#xff0c;补码的符号位也是要参与运算的。 通常的…

Hadoop 3.4.0 项目实战

1环境基于 上一篇搭建 高可用分布式集群 2 官方提供MapReduce程序 #评估圆周率 cd /data/hadoop/share/hadoop/mapreduce/ hadoop jar hadoop-mapreduce-examples-3.4.0.jar pi 2 6 3 实例项目分析1 #预分析的文件如&#xff0c;如单词统计 # #上传文件到hdfs hdfs …

高通QCS6490开发(四):FV01 AI开发板系统烧录

本期主要介绍如何在FV01开发板上烧录镜像 所用硬件有&#xff1a; FV01开发板和type C线 操作步骤如下&#xff1a; 首先连接电源线开机&#xff0c;然后通过Type C线连接FV01开发板和PC&#xff0c;接线如下&#xff1a; 1&#xff09;将设备通过如下命令进入到EDL紧急下载…

三.使用HashiCorp Vault工具管理数据库

三.ubuntu安装使用HashiCorp Vault工具管理数据库 HashiCorp Vault 是一个基于身份的秘密和加密管理系统。机密是您想要严格控制访问的任何内容,例如 API 加密密钥、密码和证书。Vault 提供由身份验证和授权方法门控的加密服务。使用 Vault 的 UI、CLI 或 HTTP API,可以安全…

Web3与物联网:构建智能连接的数字世界

引言 随着互联网的不断发展&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;作为一种新兴的信息技术&#xff0c;正在逐渐渗透到我们的生活和工作中。而随着Web3的兴起&#xff0c;物联网将迎来新的发展机遇。本文将探讨Web3与物联网的结合&#xff0c;如何…

废品回收 小程序+APP功能介绍

基于您提供的废品回收应用的开发需求&#xff0c;以下是基于Uniapp&#xff08;用户端和回收员端&#xff09;、Thinkphp5&#xff08;后台&#xff09;、MySQL&#xff08;数据库&#xff09;的综合解决方案的概述。 一、技术栈选择 前端&#xff1a;Uniapp&#xff08;跨平…