华为OD机试 - 流水线 - 逻辑分析(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

一个工厂有 m 条流水线,来并行完成 n 个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。现给定流水线个数 m,需要完成的作业数 n,每个作业的处理时间分别为 t1.t2…tn。请你

编程计算处理完所有作业的耗时为多少?

当 n>m 时,首先处理时间短的 m 个作业进入流水线,其他的等待,当某个作业完成时,依次从剩余作业中取处理时间最短的进入处理。

二、输入描述

第一行为2 个整数 (采用空格分隔),分别表示流水线个数 m 和作业数 n;

第二行输入 n个整数 (采用空格分隔) ,表示每个作业的处理时长 t1,t2…tn。

0< m,n<100,0<t1,t2…tn<100.

注:保证输入都是合法的

三、输出描述

输出处理完所有作业的总时长。

1、输入

3 5
8 4 3 2 10

2、输出

13

3、说明

  1. 先安排时间为2、3、4的三个作业;
  2. 第一条流水线先完成作业,然后调度剩余时间最短的作业8;
  3. 第二条流水线完成作业,然后调度剩余时间最短的作业10;
  4. 总耗时就是第二条流水线完成作业的时间

四、解题思路

  1. 将每个作业的处理时长有小到大排序;
  2. 每条流水线依次处理时长小的作业,其它的作业等待;
  3. 当第一条作业完成后,再完成剩余的作业中处理时间最小的作业;
  4. 依次类推;
  5. 总耗时就是最后一个作业所对应的流水线的总耗时。

五、Java算法源码

package com.guor.od;import java.util.*;public class OdTest01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] line = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 流水线个数 mint m = line[0];// 作业数 nint n = line[1];// 每个作业的处理时长int[] timeArr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 有小到大排序Arrays.sort(timeArr);/*** 特殊情况:* 流水线 大于等于 独立的作业时,可以直接处理,不需要等待排队* 直接返回独立作业最长的处理时间即可*/if (m >= n) {System.out.println(timeArr[timeArr.length - 1]);return;}// 当 n>m 时,首先处理时间短的 m 个作业进入流水线,其他的等待Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < timeArr.length; i++) {// m条流水线同时处理作业int key = i % m;map.put(key, map.getOrDefault(key, 0) + timeArr[i]);}// 处理完所有作业的总时长int sum = 0;for (Integer value : map.values()) {sum = Math.max(sum, value);}// 输出处理完所有作业的总时长System.out.println(sum);}
}

六、效果展示

1、输入

4 6
10 20 15 12 8 9

2、输出

29

3、说明

  • 10 20 15 12 8 9从小到大排序,8 9 10 12 15 20
  • 一共4条流水线,先完成8 9 10 12;
  • 第一条流水线先完成作业,然后调度剩余时间最短的作业15;
  • 第二条流水线完成作业,然后调度剩余时间最短的作业20;
  • 总耗时就是第二条流水线完成作业的时间29。

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

Linux:IP转INT详解

一、IP地址介绍 IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;是所有连接到网络设备的唯一标识符。IP地址由32位二进制数表示&#xff0c;通常以四段十进制数&#xff08;每个数值范围为0-255&#xff09;表示&#xff0c;例如192.1…

提升前端开发效率:基于vue的van-radio-group组件封装指南

前言 vant 作为一款流行的 ui 框架&#xff0c;其中&#xff0c;van-radio-group 组件是一个常用的单选框组件&#xff0c;但有时我们需要根据项目需求进行定制化封装。本文将介绍如何基于 vue 框架封装 van-radio-group 组件&#xff0c;让我们一起来探索吧&#xff01; 封装文…

Python-模块

python模块&#xff08;Module&#xff09;&#xff0c;是一个python 文件&#xff0c;以.py结尾&#xff0c;模块可以定义函数&#xff0c;类和变量。 模块的导入方法 [from 模块名 ] import [模块 | 类 | 变量 | 函数 | *] [as 别名 ] import模块名 import timetime.sleep(…

EFK代替ELK方案7.17.3

文章目录 一. 传统的ELK二. EFK2.1 安装elasticSearch2.2 服务端安装fileBeats2.2.1. 安装 该也没有必要安装odcker,直接下载yum或官网jar包启动即可.2.2.2.编辑配置文件 filebeat-java-logback.yml2.2.3. es配置common_log_pipeline解析日志 三.启动测试 最近发现,logstash日志…

性能测试 —— Jmeter 常用三种定时器

1、同步定时器 位置&#xff1a;HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时&#xff0c;为了让用户能真正的同时执行&#xff0c;添加同步定时器&#xff0c;用户阻塞线程&#xff0c;知道线程数达到预先配置的数值&#xff0c;才开始执行…

南大通用数据库-Gbase-8a-学习-39-show命令汇总(持续更新)

目录 一、环境信息 二、show功能参数 三、show命令示例 1、SHOW LOAD LOGS&#xff08;加载日志报错&#xff09; 2、SHOW COLUMNS&#xff08;列信息&#xff09; 3、SHOW CREATE DATABASE&#xff08;建库信息&#xff09; 4、SHOW CREATE PROCEDURE &#xff08;存储…

前后端分离技术逐步深入,让你更加深入理解Nginx+Tomcat

你提到了熟悉Tomcat和Nginx服务器的配置&#xff0c;以及应用前后端分离技术&#xff0c;请解释一下Tomcat和Nginx的主要作用是什么&#xff0c;以及在前后端分离中它们的角色是什么&#xff1f; 标准回答&#xff1a; Tomcat是一个Java应用服务器&#xff0c;主要用于运行Jav…

Linux面试题

当准备 Linux 面试时&#xff0c;以下是一些可能会遇到的常见 Linux 面试题&#xff1a; 1. 什么是Linux&#xff1f;解释一下Linux操作系统的特点。 2. 什么是Linux内核&#xff1f;Linux内核的作用是什么&#xff1f; 3. 如何在Linux系统上查看当前的IP地址和子网掩码&#…

rk平台快捷键进入uboot模式和烧录模式

(1)进入U-boot命令行模式 上电时,多次按下ctrlc按键(2)进入maskrom烧录模式 方法一:上电时(或者reboot时),多次按下ctrlb 方法二:在uboot命令 手敲rbrom

Java 通过页码范围提取新的文档(docx、pdf)

客户有一个新的需求。控制用户下载文档的页数。比如。我设置只开放10页。那就要我们去做截取文档。pdf自带有实现的方式。docx暂时没找到开源的。我这边处理的docx。是通过转换成pdf。通过截取pdf后再转成docx去实现的 工具类如下&#xff1a; import java.io.FileOutputStream…

git及dbc的学习

&#xff11;&#xff09;git的使用方法 Command line instructions You can also upload existing files from your computer using the instructions below. Git global setup git config --global user.name "username" git config --global user.email "xx…

SpringMvc高级(拦截器和文件上传下载)

拦截器&#xff08;Interceptor&#xff09;是一种常用的设计模式&#xff0c;在软件工程领域被广泛应用。拦截器通常被用来处理各种请求和响应&#xff0c;可以在请求发送前或响应返回后进行一系列的操作和处理。拦截器可以用于请求身份认证、日志记录、性能优化、权限控制、数…

vue3 - 使用reactive定义响应式数据进行赋值时,视图没有改变,值已经改变的解决方案

问题&#xff1a; 在Vue 3.0 中我们使用 reactive() 定义的响应式数据的时候&#xff0c;当是一个数组或对象时&#xff0c;我们直接进行赋值&#xff0c;发现数据已经修改成功&#xff0c;但是页⾯并没有自动渲染成最新的数据&#xff1b;这是为什么呢&#xff1f; 就如同官网…

线性代数的本质(二)——线性变换与矩阵

文章目录 线性变换与矩阵线性变换与二阶方阵常见的线性变换复合变换与矩阵乘法矩阵的定义列空间与基矩阵的秩逆变换与逆矩阵 线性变换与矩阵 线性变换与二阶方阵 本节从二维平面出发学习线性代数。通常选用平面坐标系 O x y Oxy Oxy &#xff0c;基向量为 i , j \mathbf i,…

数据结构-时间复杂度/空间复杂度

Hello&#xff0c;好久没有更新了哦&#xff0c;已经开始学习数据结构了&#xff0c;这篇文章呢就是对刚学数据结构所接触到的时间复杂度进行一个分享哦&#xff0c;如果有错误之处&#xff0c;大家记得拍拍我哦~ 既然要讨论时间/空间复杂度&#xff0c;那我们就得知道时间/空…

SpringBoot国际化配置组件支持本地配置和数据库配置

文章目录 0. 前言i18n-spring-boot-starter1. 使用方式0.引入依赖1.配置项2.初始化国际化配置表3.如何使用 2. 核心源码实现一个拦截器I18nInterceptorI18nMessageResource 加载国际化配置 3.源码地址 0. 前言 写个了原生的SpringBoot国际化配置组件支持本地配置和数据库配置 背…

tdesign的文件上传(微信小程序+idea的springboot)

目录 1. springboot后端 1.1 FileController.java 1.2 listener文件的ErpApplicationListener.java 1.3 【重点&#xff01;】FileServiceImpl层 1.4 IFileService 1.5 StringUtil通用类 1.6 主程序加一个监听器 1.7 application.yml文件 2. 微信小程序端 2.1 TDesign的…

latex如何保证图片和文字的相对位置不变

文章目录 latex如何保证图片与文字的相对位置不变&#xff1f;解决方法&#xff1a; latex如何保证图片与文字的相对位置不变&#xff1f; 解决方法&#xff1a; 加入宏包\usepackage{float} 在figure环境后面加入参数H \begin{figure}[H]\centering\includegraphics[width…

随机产生两个数在屏幕上打印,例如6*7=? 让学生输入答案,若正确打印答对了,否则提示学生重做,直到答对为止(小游戏)

#include<stdio.h> #include<stdlib.h> #include<time.h>//时间的库函数 int main() {int i 0;srand(time(0));//随机种子初始化int num1 rand() %10;//随机数int num2 rand() %10;printf("%d * %d ?\n", num1, num2);printf("请输入答案…

阿里云无影电脑:免费体验无影云电脑3个月

阿里云无影云电脑免费领取流程&#xff0c;免费无影云电脑配置为4核8G&#xff0c;可以免费使用3个月&#xff0c;阿里云百科分享阿里云无影云电脑&#xff08;云桌面&#xff09;免费申请入口、申请流程及免费使用限制条件说明&#xff1a; 目录 阿里云无影云电脑免费申请入…