当前位置: 首页 > news >正文

华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)

在这里插入图片描述

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

专栏导读

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

有5台打印机打印文件,每台打印机有自己的待打印队列。

因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10 不同的 优先级,其中数字越大优先级越高。

打印机会从自己的待打印队列中选取优先级最高的文件来打印。

如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。

现在请你来模拟这5台打印机的打印过程。

二、输入描述

每个输入包含1个测试用例,

每个测试用例第一行给出发生事件的数量 N (0 < N < 1000)。

接下来有 N 行,分别表示发生的事件。共有如下两种事件:

  1. IN P NUM,表示有一个拥有优先级 NUM 的文件放到了打印机 P 的待打印队列中。(0 < P <= 5, 0 < NUM <= 10);
  2. OUT P,表示打印机 P 进行了一次文件打印,同时该文件从待打印队列中取出。(0 < P <= 5)。

三、输出描述

对于每个测试用例的,每次 OUT P 事件,请在一行中输出文件的编号。

如果此时没有文件可以打印,请输出**“NULL”**。

文件的编号定义为为第 IN P NUM 事件发生第 x 次,此处待打印文件的编号为 x。编号从1开始。

四、测试用例

测试用例1:

1、输入

7
IN 1 1
IN 1 2
IN 1 3
IN 2 1
OUT 1
OUT 2
OUT 2

2、输出

3
4
NULL

3、说明

在打印机 1 的队列中插入了 3 个文件,分别有不同的优先级,其中编号 3 的文件优先级最高,先被取出。

在打印机 2 的队列中插入了 1 个文件,优先级为 1,因此它被首先取出。

打印机 2 在第二次 OUT 操作时队列已经为空,因此输出 “NULL”。

测试用例2:

1、输入

6
IN 3 4
IN 3 5
IN 3 5
OUT 3
OUT 3
OUT 3

2、输出

2
3
1

3、说明

  • IN 3 4: 在打印机 3 的队列中插入优先级为 4 的文件,文件编号为 1。
  • IN 3 5: 在打印机 3 的队列中插入优先级为 5 的文件,文件编号为 2。
  • IN 3 5: 在打印机 3 的队列中插入优先级为 5 的文件,文件编号为 3。
  • OUT 3: 打印机 3 中有两个优先级 5 的文件,文件编号为 2 的文件最早插入,输出 2。
  • OUT 3: 剩余优先级最高的文件是编号为 3 的文件(优先级 5),输出 3。
  • OUT 3: 剩下的文件是编号为 1 的文件(优先级 4),输出 1。

五、解题思路

这个问题要求模拟打印机的文件调度过程,关键在于正确处理每个打印机队列中的文件优先级和文件进入队列的顺序。在这个过程中,我们需要解决以下几个问题:

优先级处理:每个文件有一个 1 到 10 的优先级,数字越大优先级越高,打印机应首先处理优先级最高的文件。

先进先出原则:如果有多个文件的优先级相同,应该按照它们进入队列的顺序来打印(FIFO - First In First Out)。

2、为什么采用优先队列?

为了管理每个打印机的待打印队列,我们为每台打印机使用一个 PriorityQueue(优先队列)数据结构。

PriorityQueue 是一种适合处理需要频繁获取最高优先级元素的问题的数据结构。它在插入和删除元素时能保持队列中元素的顺序,以便随时可以取出优先级最高的元素。

在 Java 中,PriorityQueue 是一个基于堆(Heap)的实现,默认是小顶堆(最小优先队列),因此我们需要自定义比较器来实现大顶堆的行为(最大优先队列)。

3、具体步骤:

  1. 创建 5 个 PriorityQueue 对象并存储在列表中,每个 PriorityQueue 用于管理对应打印机的打印任务。
  2. 对于 IN 事件,将文件加入对应打印机的队列,并根据文件的优先级进行排序。
  3. 对于 OUT 事件,从对应打印机的队列中取出优先级最高的文件,如果队列为空则输出 “NULL”。
  4. 根据处理结果输出文件编号或 “NULL”。

六、Java算法源码

public class OdTest01 {// 自定义类表示一个打印任务static class PrintJob {int priority; // 优先级int id; // 文件编号public PrintJob(int priority, int id) {this.priority = priority;this.id = id;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取事件数量int N = scanner.nextInt();scanner.nextLine(); // 消耗换行符// 初始化打印机队列,每个打印机用一个优先队列表示List<PriorityQueue<PrintJob>> printers = new ArrayList<>();for (int i = 0; i < 5; i++) {printers.add(new PriorityQueue<>((a, b) -> a.priority != b.priority ? b.priority - a.priority : a.id - b.id));}int jobId = 1; // 文件编号,从1开始StringBuilder output = new StringBuilder();// 处理每个事件for (int i = 0; i < N; i++) {String[] parts = scanner.nextLine().split(" ");String command = parts[0];int printerIndex = Integer.parseInt(parts[1]) - 1; // 打印机编号从1开始,需要转为索引0-4if ("IN".equals(command)) {int priority = Integer.parseInt(parts[2]);// 创建新的打印任务并加入到对应的打印机队列中printers.get(printerIndex).offer(new PrintJob(priority, jobId++));} else if ("OUT".equals(command)) {// 从对应的打印机队列中取出优先级最高的文件PriorityQueue<PrintJob> queue = printers.get(printerIndex);if (!queue.isEmpty()) {// 输出文件编号output.append(queue.poll().id).append("\n");} else {// 队列为空output.append("NULL\n");}}}// 输出结果System.out.print(output.toString());scanner.close();}
}

七、效果展示

1、输入

4
IN 2 7
IN 2 7
OUT 2
OUT 2

2、输出

1
2

3、说明

两个 IN 操作分别在打印机 2 的队列中插入两个优先级为 7 的文件,编号分别为 1 和 2。

第一个 OUT 操作取出优先级最高且最早进入队列的文件,即编号 1。

第二个 OUT 操作取出剩下的唯一文件,编号为 2。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

相关文章:

华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…...

MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台

物联网&#xff08;IoT&#xff09;时代&#xff0c;企业正以前所未有的速度加快数字化转型。西安天能软件科技有限责任公司&#xff08;Skyable&#xff09;作为工业物联网领域的领先企业&#xff0c;携手MatrixOne&#xff0c;共同构建新一代一体化物联网平台&#xff0c;实现…...

正则表达式---元字符

简介 正则表达式分为两种语法&#xff1a;POSIX标准的语法&#xff0c;Perl语法。 正则表达式的POSIX规范&#xff0c;分为基本型正则表达式&#xff08;Basic Regular Expression, BRE&#xff09;&#xff0c;扩展型正则表达式&#xff08;Extended Regular Expression&…...

数据库Redis篇

系列文章目录 第一章 C/C语言篇第二章 计算机网络篇第三章 操作系统篇第四章 数据库MySQL篇第五章 数据库Redis篇第六章 场景题/算法题第七篇 常见HR问题篇 本系列专栏&#xff1a;点击进入 后端开发面经 关注走一波 秋招阶段&#xff0c;面过很多大中小厂&#xff0c;积攒了…...

在区块链技术中,什么是权益证明(PoS)?

权益证明&#xff08;Proof of Stake, PoS&#xff09;是一种与工作量证明&#xff08;Proof of Work, PoW&#xff09;类似的共识机制&#xff0c;但它通过不同的方式来确保区块链网络的安全性和一致性。PoS的主要目标是解决PoW中存在的高能耗问题&#xff0c;并提高网络的扩展…...

Spring Boot——日志介绍和配置

1. 日志的介绍 在前面的学习中&#xff0c;控制台上打印出来的一大堆内容就是日志&#xff0c;可以帮助我们发现问题&#xff0c;分析问题&#xff0c;定位问题&#xff0c;除此之外&#xff0c;日志还可以进行系统的监控&#xff0c;数据采集等 2. 日志的使用 在程序中获取日…...

Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)

项目源码&数据源获取 利用Python实现全国岗位招聘信息可视化分析 项目背景&#xff1a; 1.为企业招聘决策提供科学的依据和参考&#xff0c;可以帮助人力资源部门、招聘机构和求职者了解当前的就业形势、行业趋势和人才需求&#xff0c;从而做出更明智的招聘和求职决策。…...

【真题笔记】16年系统架构设计师要点总结

【真题笔记】16年系统架构设计师要点总结 存储部件接口嵌入式处理器产品配置配置管理用户文档系统文档CMM&#xff08;能力成熟度模型&#xff09;螺旋模型敏捷软件开发的方法学软件工具面向对象的分析模型设计模型COP&#xff08;面向构件的编程&#xff09;构件原子构件模块S…...

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前&#xff0c;需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed&#xff0c;它就是一个绝对定位元素。​ 在…...

Knowledge-refined Denoising Network for Robust Recommendation

Knowledge-refined Denoising Network for Robust Recommendation&#xff08;Sigir23&#xff09; 摘要 知识图&#xff08;KG&#xff09;包含丰富的边信息&#xff0c;是提高推荐性能和可解释性的重要组成部分。然而&#xff0c;现有的知识感知推荐方法直接在KG和用户-项目…...

轴流风机和后倾式风机的安装要求

后向离心风机风压大&#xff0c;风量足&#xff0c;安装方便。因为不需要蜗壳&#xff0c;所以风道往往需要自行设计&#xff0c;而风道的合理与否&#xff0c;大大影响了后向离心风机的效率。那么后向离心风机的安装技巧有哪些&#xff1f;怎样达到风机的最佳使用效果呢&#…...

代码笔录1

10-16 出入栈序列是否合法 // // Created by 86184 on 2024/10/16. // #include <stdio.h>//IIOOOIO int jude(char s[]) {int count 0, i 0;while (s[i] ! \0) {if (s[i] I) count;else if (s[i] O) count--;else return 0;if (count < 0) return 0;i;}if (cou…...

强网杯2024 Web WP

强网杯2024 参考链接&#xff1a;https://mp.weixin.qq.com/s/Mfmg7UsL4i9xbm3V3e5HMA https://mp.weixin.qq.com/s/vV_II8TpyaGL4HUlUS57RQ PyBlockly 源码&#xff1a; from flask import Flask, request, jsonify import re import unidecode import string import ast …...

《双指针篇》---盛最多水的容器_Java(中等但简单)

题目传送门 1.首先计算出暂时的盛水体积 2.求暂时体积和最大体积max的最大值 3.更新right和left。如果height[left] > height[right] 那么right--否则left; class Solution {public int maxArea(int[] height) {int left 0,right height.length-1; int ret 0;while (lef…...

Linux: network: 环境:网络burst的一个原因,虚拟机感染病毒导致,外部网络设备太忙

最近碰到一个问题&#xff0c;测试人员在测试一周内的产品稳定性&#xff0c;带有的业务非常大。 总是不能满足需要的时长&#xff0c;总是在一段时间内出现丢包&#xff0c;业务出现错误的现象。从tshark/tcpdump的抓包看&#xff0c;确实在某个时间段&#xff0c;有一次十几秒…...

idea使用Translation插件实现翻译

1.打开idea&#xff0c;settings&#xff0c;选择plugins&#xff0c;搜索插件Translation&#xff0c;安装 2.选择翻译引擎 3.配置引擎&#xff0c;以有道词典为例 3.1 获取应用ID&#xff0c;应用秘钥 3.1.1 创建应用 点击进入有道智云控制台 3.1.2 复制ID和秘钥 3.2 idea设…...

[OS] sys_mmap() 函数+

流程图分析 1. 调用 sys_mmap() 步骤&#xff1a;当用户程序调用 mmap() 时&#xff0c;操作系统会进入 sys_mmap() 函数。作用&#xff1a;这是整个 mmap() 操作的入口。系统调用的实现从这里开始。 2. 提取参数&#xff08;Fetch Argument&#xff09; 步骤&#xff1a;从…...

轧钢机辊道多电动机传动控制系统

轧钢机辊道多电动机传动控制系统是一种复杂的工业自动化系统&#xff0c;主要用于控制轧钢车间中多个电动机驱动的辊道&#xff0c;以实现轧件的高效、稳定输送和加工。以下是对该系统的详细介绍&#xff1a; 系统组成 轧线辊道TDC控制器&#xff1a;作为系统的核心控制单元&a…...

使用 Nginx 部署 Python 项目

今天的目标是完成一个 Python Web 项目的线上部署&#xff0c;我们使用最新的 Django 项目搭建一个简易的 Web 工程&#xff0c;然后基于 Nginx 服务部署该 Python Web 项目。 1. 前期准备 1.1 安装虚拟环境pyenv 使用虚拟环境逐渐成了 python 项目开发中的一种主流方式。py…...

[笔记] SQL 优化

一. 数据库设计优化 1. 选择合适的字段类型 设计表时&#xff0c;尽量选择存储空间小的字段类型&#xff1a; 整型字段&#xff1a;从TINYINT、SMALLINT、INT到BIGINT。小数类型&#xff1a;对于金额等需精确计算的数值使用DECIMAL&#xff0c;避免使用FLOAT和DOUBLE。字符串…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...