华为OD机试 - 打印任务排序 - 队列(Java 2024 C卷 100分)

在这里插入图片描述

目录

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

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

专栏导读

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

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

一、题目描述

某个打印机根据打印队列执行打印任务。打印任务分为九个优先级,分别用数字1-9表示,数字越大优先级越高。打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则就执行任务A的打印。

请编写一个程序,根据输入的打印队列,输出实际的打印顺序。

二、输入描述

输入一行,为每个任务的优先级,优先级之间用逗号隔开,优先级取值范围是1~9。

三、输出描述

输出一行,为每个任务的打印顺序,打印顺序从0开始,用逗号隔开。

1、输入

9,3,5

2、输出

0,2,1

3、说明

  1. 队列头部任务的优先级为9,优先级最高,序号为0;
  2. 然后队列头部任务优先级为3,队列中还有优先级为5的任务,优先级3任务被移到队列尾部;
  3. 然后打印优先级为5的任务,故其序号为1;
  4. 最后优先级为3的任务的序号为2。

四、解题思路

  1. 每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则就执行任务A的打印;
  2. 如果元素相同,保证原顺序,可以用优先队列实现,优先队列存储一个长度为2的数组,第一位是优先级,第二位是该任务出现的顺序;

  1. 如果弹出的优先级是最高的任务,即和优先队列弹出的优先级相同,添加打印顺序;
  2. 如果弹出的优先级不是最高的任务,即和优先队列弹出的优先级不相同;
    • 将弹出首个优先级再次加入队列queue;
    • 将弹出首个数组再次加入优先队列prior。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 每个任务的优先级
    int[] arr = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();

    // 每个任务的优先级依次加入队列
    Queue<Integer> queue = new ArrayDeque<>();
    /**
     * 每个任务的优先级依次加入优先队列
     * int[2]:0是每个任务的优先级,1是每个任务的优先级对应的下角标
     * 如果优先级相同则比较下角标,按下角标升序排序
     * 如果优先级不同,则按优先级降序排序
     */
    PriorityQueue<int[]> prior = new PriorityQueue<>((a, b) -> (b[0] == a[0] ? a[1] - b[1] : b[0] - a[0]));
    int[] resultArr = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        queue.offer(arr[i]);
        prior.offer(new int[]{arr[i], i});
    }

    // 打印顺序
    int n = 0;
    while(!queue.isEmpty()) {
        // 弹出首个优先级
        int poll = queue.poll();
        // 弹出首个数组
        int[] pollArr = prior.poll();
        // 如果弹出的优先级是最高的任务,即和优先队列弹出的优先级相同
        if (poll == pollArr[0]) {
            // 添加打印顺序
            resultArr[pollArr[1]] = n;
            n++;
        } else {// 如果弹出的优先级不是最高的任务,即和优先队列弹出的优先级不相同
            queue.offer(poll);// 将弹出首个优先级再次加入队列queue
            prior.offer(pollArr);// 将弹出首个数组再次加入优先队列prior
        }
    }

    // 每个任务的打印顺序
    StringJoiner joiner = new StringJoiner(",");
    for (int i = 0; i < resultArr.length; i++) {
        joiner.add(resultArr[i]+"");
    }
    System.out.println(joiner);
}

六、效果展示

1、输入

9,3,5

2、输出

0,2,1

3、说明

  1. 队列头部任务的优先级为9,优先级最高,序号为0;
  2. 然后队列头部任务优先级为3,队列中还有优先级为5的任务,优先级3任务被移到队列尾部;
  3. 然后打印优先级为5的任务,故其序号为1;
  4. 最后优先级为3的任务的序号为2。

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

io流的学习4

字符缓冲流 原理&#xff1a;底层自带了长度为8192的缓冲区提高性能。 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class BufferedStringdemo01 {public static void main(String…

Springboot实现合并单元格的excel文件导入到数据库(多模块)

最近做项目的时候一直在遇到excel导入导出的问题&#xff0c;本篇博文也是为了记录我这几天的血泪史&#xff0c;并做以记录&#xff0c;希望各位看完之后能有所收获。 以下是我excel文档里面的具体内容&#xff1a; excel文件中的编码信息属于另外一张表&#xff0c;所以以下…

基于VS code 实现Java前后端打通—基础—使用Springboot+postgreSql+mybatis+Navicat

前言&#xff1a; 作者学习webjava后的而总结&#xff0c;总的流程概括就是先使用springboot创建项目&#xff0c;在application.properties中完成相应的postgreSql和mybaits的环境配置和.xml文件中dependecy依赖配置&#xff0c;entities实现数据表的类型模板&#xff0c;分别…

【机器学习】包裹式特征选择之序列前向选择法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

php 快速入门(一)

一、配置系统环境 1.1 安装软件 1、安装php的开发软件&#xff1a;phpstorm 在这个软件中写代码 2、安装php的运行软件&#xff1a;phpstduy 写好的php程序需要放到phpstduy中&#xff0c;用户才能访问和测试 安装过程注意事项&#xff1a;安装的路径中不能有空格和中文字符&…

day6:STM32MP157——串口通信实验

使用的是cortex A7内核 【串口通信的工作原理】 本次实验使用的是uart4的串口&#xff0c;分别使用了uart4_tx和uart4_rx两个引脚。根据板子的原理图我们可以知道&#xff0c;他们分别对应着芯片的PG11和PB2 从引脚名字也可以知道使用了GPIO口&#xff0c;所以本次实验同样需…

MCGS学习——用户管理

用户管理介绍 用户管理主要是为了实现触摸屏的安全操作&#xff0c;工业过程控制中&#xff0c;应该尽量避免由于人为的误操作所引发的故障或事故&#xff0c;而某些失误带来的后果是致命的&#xff1b;通过用户管理严格限制各类操作的权限&#xff0c;使不具备操作资格的人员…

软考高级:架构与中间件技术-软件复用概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

CHAT~(持续更新)

CHAT&#xff08;持续更新&#xff09; 实现一个ChatGPT创建API设计页面布局业务操作技术架构 编码其他 实现一个ChatGPT 创建API 最简单也最需要信息的一步 继续往下做的前提 此处省略&#xff0c;想要获取接口创建方式联系 设计 页面布局 按照官网布局 业务操作 注册登…

Linux 进程通信:匿名管道、实现进程池

目录 一、进程间通信 1、 为什么需要进程通信 2、发展和分类 二、管道 1、概念 2、特点 2、复制并共享 3、用fork来共享管道原理 4、站在文件描述符角度-深度理解管道 5、站在内核角度-管道本质 三、匿名管道 1、概念 2、创建 3、snprintf 4、父子进程中进行单…

抽取CLOB字段中XML的特定元素的VALUE值

在ORACLE数据库中&#xff0c;有时XML文件会被保存在CLOB字段中。 这时候&#xff0c;若是我们要获取此字段XML中特定元素的VALUE值&#xff0c;就需要用到xmltype 这个函数。 如下面的 XML文件&#xff0c;保存在 TABLE_A 的CLOB_K 字段&#xff0c;若是我们要获取其中的 Y…

onnx | onnx-simplifier安装和使用

安装&#xff1a; pip install -i https://pypi.douban.com/simple onnx-simplifierpip install -i http://mirrors.aliyun.com/pypi/simple onnx-simplifier 使用&#xff1a; python -m onnxsim face.onnx face_sim.onnx

Unity Canvas的三种模式

一、简介&#xff1a; Canvas的Render Mode一共有三种模式&#xff1a;Screen Space -OverLay、Screen Space-Camera、World Space Screen Space - Overlay&#xff08;屏幕空间 - 覆盖&#xff09;&#xff1a; 这是最简单的 Canvas 渲染模式。UI 元素在这个模式下将渲染在屏…

Oracle参数文件详解

1、参数文件的作用 参数文件用于存放实例所需要的初始化参数&#xff0c;因为多数初始化参数都具有默认值&#xff0c;所以参数文件实际存放了非默认的初始化参数。 2、参数文件类型 1&#xff09;服务端参数文件&#xff0c;又称为 spfile 二进制的文件&#xff0c;命名规则…

PostgreSQL11 | Windows系统安装PostgreSQL

本教程选取与参考书籍《PostgreSql11 从入门到精通》&#xff08;清华大学出版社&#xff09;的11大版本最新小版本11.22的安装作为教程案例 下载 下载PostgreSQL installer 下载到本地 安装 运行安装引导器 中国地区语言选项&#xff08;暂时&#xff09; Chinese(Simplifie…

2024牛客寒假算法基础集训营4补题

E&#xff1a;贪心数据结构 首先&#xff0c;我们看一个例子&#xff1a; 114514&#xff0c;令k3,我们从左开始&#xff0c;1&#xff0c;1&#xff0c;4&#xff0c;此时为3的倍数&#xff0c;那么我们就截断。 因为若我们在此截断&#xff0c;后面的5会对以后的数产生有利…

SSM | SSM框架整合

目录: 一、整合环境搭建整合思路准备所需JAR包编写配置文件 二、整合应用测试 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正在努力学习、努力敲代码中! 让我们一起继续努力学习&#xff01; 该文章参考学习教材为&#xff1a; 《Java EE企业级应…

Qt——2D画图

基础画图函数 矩形 painter.drawRect(50,50,200,100); 圆角矩形 painter.drawRoundRect(50,50,200,200,50,50); xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定&#xff0c;并且应该在0.0到100.0的范围内 弧线 painter.drawArc(50,50,200,200, -90*16, 90*16);…

基于nodejs+vue学生作业管理系统python-flask-django-php

他们不仅希望页面简单大方&#xff0c;还希望操作方便&#xff0c;可以快速锁定他们需要的线上管理方式。基于这种情况&#xff0c;我们需要这样一个界面简单大方、功能齐全的系统来解决用户问题&#xff0c;满足用户需求。 课题主要分为三大模块&#xff1a;即管理员模块和学生…

[AutoSar]BSW_ECUC模块配置

目录 关键词平台说明一、背景二、EcucGeneral2.1 BswInitialization 三、EcucHardware四、EcucPduCollection五、EcucPartitionCollection 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c; EB芯片厂商TI 英飞凌编程语…