如何在华为OD机试中获得满分?Java实现【打印文件】一文详解!

news2024/12/23 17:32:12

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
    • 2. 输入描述
    • 3. 输出描述
    • 4. Java算法源码
    • 5. 测试
    • 6.解题思路

1. 题目描述

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

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

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

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

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

2. 输入描述

每个输入包含 1 个测试用例,每个测试用例第 1 行给出发生事件的数量N(0<N<1000)。

接下来有 N 行,分别表示发生的事件。

共有如下两种事件:

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

3. 输出描述

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

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

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

4. Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    sc.nextLine();

    // 放置打印任务 key:打印机的编号,value:type集合
    Map<String, List<int[]>> map = new HashMap<>();
    int count = 0;
    for (int i = 0; i < n; i++) {
        String[] strs = sc.nextLine().split(" ");
        // 存入map
        if (strs[0].equals("IN")) {
            int[] inInts = new int[2];
            inInts[0] = Integer.parseInt(strs[2]);
            inInts[1] = ++count;
            List<int[]> inList = new ArrayList<>();
            if (map.containsKey(strs[1])) {
                inList = map.get(strs[1]);
                inList.add(inInts);
            } else {
                inList.add(inInts);
            }
            map.put(strs[1], inList);
            // 判断打印机是否存在打印任务
        } else if (strs[0].equals("OUT")) {
            if (!map.containsKey(strs[1])) {
                System.out.println("NULL");
                continue;
            }
            // 如果存在,求出打印机的打印任务
            List<int[]> outList = map.get(strs[1]);
            // 如果不存在打印任务,输出NULL
            if (outList.size() == 0) {
                System.out.println("NULL");
            } else {
                outList.sort((a, b) -> {
                    return b[0] - a[0];
                });
                System.out.println(outList.get(0)[1]);
                // 取出第一个元素
                outList.remove(0);
            }
        }
    }
}

5. 测试

在这里插入图片描述

6.解题思路

在这里插入图片描述

  1. 读取输入的测试用例数量N。
  2. 创建一个HashMap,用于存储每个打印机的待打印队列。键是打印机的编号,值是一个包含文件信息的列表。列表中的每个元素是一个整型数组,包含两个元素:文件的优先级和文件的编号。
  3. 使用一个计数器count,用于记录文件的编号。
  4. 循环N次,处理每个事件:
    • 读取一行输入,将其分割为事件类型和相关参数。
    • 如果事件类型是"IN",表示有一个文件放入了待打印队列。将文件的优先级和编号存储到列表中,并将列表存储到HashMap中对应打印机的键值对中。
    • 如果事件类型是"OUT",表示打印机进行了一次文件打印。首先检查待打印队列是否为空,如果为空则输出"NULL"。否则,获取待打印队列中优先级最高的文件(优先级最大且编号最小)。输出该文件的编号,并从待打印队列中移除该文件。
  5. 完成所有事件处理后,结束程序。

该算法的时间复杂度为O(NlogM),其中N是事件数量,M是待打印队列中文件的平均数量。每次处理OUT事件时,需要对待打印队列中的文件按优先级进行排序,时间复杂度为O(MlogM)。最终的空间复杂度取决于待打印队列中文件的总数量,即O(M)
在这里插入图片描述

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

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

相关文章

jsp基于 JavaWeb+springboot 的校园快递驿站管理系统

不同的系统提供的服务也不相同&#xff0c;其对应的功能也不相同&#xff0c;所以&#xff0c;系统开工前&#xff0c;需要明确其用途&#xff0c;确定其功能。由此&#xff0c;才可以进行各个任务的开展。 校园驿站管理系统经过分析&#xff0c;确定了其需要设置管理员的角色&…

如何使用Word控件Spire.Doc创建专属条码?

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

chatgpt赋能python:Python修改变量名:提高代码可读性和维护性

Python修改变量名&#xff1a;提高代码可读性和维护性 Python是一门通用编程语言&#xff0c;被广泛应用于Web开发、数据分析、人工智能等领域。在实际开发中&#xff0c;我们可能会遇到需要修改变量名的情况。本文将介绍如何使用Python修改变量名&#xff0c;提高代码的可读性…

LiveGBS流媒体平台国标GB/T28181功能-作为下级级联到海康大华宇视华为等第三方国标平台同样支持对接政务公安内网国标视频平台

LiveGBS流媒体平台国标GB/T28181功能-作为下级级联到海康大华宇视华为等第三方国标平台同样支持对接政务公安内网国标视频平台 1、什么是GB/T28181级联2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、如何提供信息给上级3.2、上级国标平台如何添加下级域3.2、接入Li…

【vim neovim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装--代码补全、文件树)

本文所有操作均通过ssh连接腾讯云服务器完成。如果你正在使用安装GNOME桌面的Linux&#xff0c;很多操作可以通过鼠标完成&#xff0c;或许更加直观。 推荐使用neovim&#xff08;结合鼠标操作更加丝滑&#xff09;。 nvim效果展示&#xff1a; 一、vim简介二、vim操作2.1 三种…

【SpringCloud】三、Nacos服务注册+配置管理+集群搭建

文章目录 一、认识Nacos1、安装2、服务注册和发现3、服务分级存储模型4、负载均衡策略--NacosRule5、服务实例的权重设置5、环境隔离namespace6、Eureka和Nacos的区别 二、Nacos配置管理1、统一配置管理2、微服务配置拉取3、配置热更新4、多环境配置共享 三、Nacos集群搭建1、初…

【JavaSE】Java基础语法(十一):String、StringBuilder详解

文章目录 &#x1f378;1. String类&#x1f349;&#x1f349;1.1 String概述&#x1f349;&#x1f349;1.2 String类的构造方法&#x1f349;&#x1f349;1.3 创建字符串对象的区别对比&#x1f349;&#x1f349;1.4 字符串的比较1.4.1 字符串的比较 &#x1f349;&#x…

GitHub上标星75k+超牛的《Java面试突击离线版》够你润进去了

前言 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的&#xff0c;我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后&#xff0c;决胜千里之外!不打毫无准备的仗,我觉…

C# 栈(Stack)

目录 一、概述 二、基本的用法 1.入栈 2.出栈 Pop 方法 Peek 方法 3.判断元素是否存在 4.获取 Stack 的长度 5.遍历 Stack 6.清空容器 7.Stack 泛型类 三、结束 一、概述 栈表示对象的简单后进先出 (LIFO) 非泛型集合。 Stack 和 List 一样是一种储存容器&#x…

这种新的Facebook Messenger群发方式,让你的信息更有价值!

随着社交媒体的迅速发展&#xff0c;Facebook已成为人们分享信息、建立联系和开展业务的重要平台之一。在这个数字时代&#xff0c;如何有效地传达信息并与目标受众建立联系成为了关键的挑战。 而最近引入的Facebook Messenger群发方式为我们提供了一种全新的机会&#xff0c;…

【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 文章目录 一、加载点云二、计算法向量三、泊松建模四、利用输出密度一、加载点云 加载兔子点云…

接口测试神器:ApiKit

想给大家分享一款技术人必备的接口测试神器&#xff1a;ApiKit&#xff0c;应该是我目前用过&#xff0c;算得上良心的接口工具 背景 作为互联网行业技术从业者&#xff0c;接口调试是必不可少的一项技能&#xff0c;通常我们都会选择使用 Postman 这类工具来进行接口调试&…

Kali-linux使用Aircrack-ng工具破解无线网络

Aircrack-ng是一款基于破解无线802.11协议的WEP及WPA-PSK加密的工具。该工具主要用了两种攻击方式进行WEP破解。一种是FMS攻击&#xff0c;该攻击方式是以发现该WEP漏洞的研究人员名字&#xff08;Scott Fluhrer、Itsik Mantin及Adi Shamir&#xff09;所命名&#xff1b;另一种…

播放量上百亿,易车新媒体矩阵到底做对了什么

消费者的媒介触点和整体决策链路在不断向线上偏移&#xff0c;有数据显示&#xff0c;超7成的车主对信息的获取渠道偏好为汽车垂直媒体。 在这个大背景下&#xff0c;谁能打造更专业的内容&#xff0c;能更快速且广泛地触达用户&#xff0c;谁才更有可能脱颖而出&#xff0c;汽…

如何快速搭建SpringBoot+Vue前后端分离的开发环境

唠嗑部分 今天我们来说一说&#xff0c;如何快速搭建SpringBootVue前后端分离的开发环境 需要前置环境nodejs&#xff0c;请自行安装(傻瓜式安装) SpringBoot采用2.4.2版本&#xff0c;Vue采用Vue2版本 言归正传 创建Vue项目 1、安装vue npm install -g vue/cli2、检查v…

【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第一章——调试调优背景介绍

1.模型迁移、模型调试调优背景介绍 模型训练\推理过程中可能遇到的问题&#xff1a; • 代码编写错误&#xff0c;问题难以定位&#xff1b; • 模型结构错误&#xff1b; • 权重更新错误&#xff1b; • 损失函数设计错误&#xff1b; • 半精度下计算溢出&#xff1b; • L…

上线11年公众号广告大变天!最新政策解读|西瓜数据

昨晚&#xff0c;微信公众平台的一则公告&#xff0c;在圈内炸开锅了。 ▲ 图片来源&#xff1a;西瓜数据社群截图 公告称&#xff1a; 公众号运营者与第三方商业合作形式推销商品或者服务&#xff0c;如附加购物链接等购买方式的商业合作营销内容&#xff0c;在2023年6月30日…

迅为RK3568开发板Android 双屏/三屏同显

iTOP-RK3568 开发板支持以下屏幕 迅为 LVDS 7 寸屏幕 迅为 LVDS 10.1 寸 1024*600 屏幕 迅为 LVDS 10.1 寸 1280*800 屏幕 迅为 MIPI 7 寸屏幕 HDMI 屏幕&#xff08;通过 HDMI 线连接&#xff09; HDMI 屏幕&#xff08;通过 VGA 线连接&#xff09; 然后修改 Android1…

Linux系统提权

滥用的SUDO提权 执行流程&#xff1a;当前用户转换到root&#xff0c;然后以root身份执行命令&#xff0c;执行完成后&#xff0c;直接退回到当前用户 注意&#xff1a;执行sudo时输入的命令&#xff0c;是当前用户的密码&#xff0c;而非root密码 sudo配置文件&#xff1a;…

SpringBoot枚举入参实战

文章目录 前言一、什么是枚举&#xff1f;二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…