华为OD机考算法题:支持优先级的队列

题目部分

题目支持优先级的队列
难度
题目说明实现一个支持优先级的队列,高优先级(数字越大,优先级越高)先出队列;同优先级时先进先出。
如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。
队列存储的数据内容是一个整数。
输入描述一组待存入队列的数据(包含内容和优先级),每组数字内容在前,优先级在后。
输出描述队列的数据内容(优先级信息输出时不再体现)。
补充说明不用考虑输入数据不合法的情况,测试数据不超过100个。
------------------------------------------------------
示例
示例1
输入(10,1),(20,1),(30,2),(40,3)
输出40,30,10,20
说明输入样例中,向队列写入了 4 个数据,每个数据由数据内容和优先级组成。
输入和输出内容都不含空格。
数据 40 的优先级最高,所以最先输出,其次是 30;10 和 20 优先级相同,所以按输入顺序输出。
示例2
输入(10,1),(10,1),(30,2),(40,3)
输出40,30,10
说明输入样例中,向队列写入了4个数据,每个数据由数据内容和优先级组成。
输入和输出内容都不含空格。
数据 40 的优先级最高,所以最先输出,其次是 30;两个 10 和 10 构成重复数据,被丢弃一个。


解读与分析

题目解读

输入一个字符串,把字符串解析成各种队列数据,根据优先级输出数据,如果优先级相同,则按照原顺序输出。

分析与思路

分两步实现。
1. 解析:对收入的字符串以 “(” 和 “)” 配对,解析成每组数据元素 element,包括数据内容(element[0])和数据优先级( element[1] )。并把它放到数组 dataArray (dataArray 的元素为 element)中。
2. 排序:对数组中的数据进行排序,排序的规则为按照每个元素的 element[1] 大小排序(从大到小)。
3. 输出:对排序的元素,逐个输出数据内容(element[0]),需要注意的是,如果前一个输出的数据的内容和优先级与当前即将输出的数据相等,则忽略,继续下一个。

此算法的时间复杂度和空间复杂度均为 O(n)。


代码实现

Java代码

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;/*** 支持优先级的队列* * @since 2023.10.26* @version 0.1* @author Frank**/
public class PriorityQueue {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();int[][] elements = getElements( input );sort( elements );output( elements );}}private static int[][] getElements( String input ){List<int[]> eleList = new ArrayList();int indexLeft = 0;int indexRight = 0;while( indexLeft != -1){indexLeft = input.indexOf( "(",  indexRight );indexRight = input.indexOf( ")",  indexRight );if( indexLeft == -1 ){break;}String eleStr = input.substring( indexLeft + 1, indexRight );String[] eleArr = eleStr.split( "," );int[] element = new int[2];element[0] = Integer.parseInt( eleArr[0] );element[1] = Integer.parseInt( eleArr[1] );eleList.add( element );indexRight += 1;}int[][] ret = new int[eleList.size()][2];for( int i = 0; i < eleList.size(); i ++ ){ret[i] = eleList.get( i );}return ret;}private static void sort( int[][] elements) {Arrays.sort( elements, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o2[1] - o1[1];}} );}private static void output( int[][] elements ) {StringBuffer sb = new StringBuffer();for( int i = 0; i < elements.length; i ++ ){if( i > 0 && ( elements[i][0] ==  elements[i - 1][0] ) && ( elements[i][1] ==  elements[i - 1][1] )  ) {continue;}sb.append( elements[i][0] + "," );}String ret = sb.toString();ret = ret.substring( 0, ret.length() - 1);System.out.println( ret );}
}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {var elements = getElements(line);sort(elements);output(elements);}
}();function getElements(input) {var eleList = new Array();var indexLeft = 0;var indexRight = 0;while (indexLeft != -1) {indexLeft = input.indexOf("(", indexRight);indexRight = input.indexOf(")", indexRight);if (indexLeft == -1) {break;}var eleStr = input.substring(indexLeft + 1, indexRight);var eleArr = eleStr.split(",");var element = new Array();element[0] = parseInt(eleArr[0]);element[1] = parseInt(eleArr[1]);eleList.push(element);indexRight += 1;}return eleList;
}function sort( elements ) {elements.sort( function( a, b) {return b[1] - a[1];})
}function output( elements ) {var ret = "";for( var i = 0; i < elements.length; i ++ ){if( i > 0 && ( elements[i][0] ==  elements[i - 1][0] ) && ( elements[i][1] ==  elements[i - 1][1] )  ) {continue;}ret += ( elements[i][0] + "," );}ret = ret.substring( 0, ret.length - 1);console.log( ret );
}

(完)

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

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

相关文章

Windows下Redis配置密码,并设置自启动

1. 解压redis修改配置文件&#xff08;设置密码&#xff09; 打开Redis的配置文件&#xff0c;通常位于Redis安装目录下的 redis.windows.conf 去掉"requirepass"前注释&#xff0c;修改"foobared"为要设置的密码 requirepass foobared2.注册服务&#x…

Docker 批量导出/导入镜像

可以编写一个脚本&#xff0c;该脚本循环遍历一个文件夹中的所有镜像存档文件&#xff0c;并使用 docker load 命令加载它们。以下是一个 Bash 脚本示例&#xff1a; 导出&#xff1a; #!/bin/bash### 批量docker镜像的_脚本 # 获取到 "image:tag" 格式的镜像名 IMG…

Mac 安装psycopg2,报错Error: pg_config executable not found.

在mac 上安装psycopg2的方法&#xff1a;执行&#xff1a;pip3 install psycopg2-binary。 如果执行pip3 install psycopg2&#xff0c;无法安装psycopg2 报错信息如下&#xff1a; Collecting psycopg2Using cached psycopg2-2.9.9.tar.gz (384 kB)Preparing metadata (set…

9.Vue2-监听属性的用法

题记 vue2监听属性的用法 计数器 使用watch实现计数器&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>实例</title> <script src"https://cdn.staticfile.org/vue/2.4.2/vue.min.js"…

SpringCloud之Eureka的学习【详细】

目录 服务架构演变 单体架构 分布式架构 分布式架构需要考虑的问题 微服务 架构比较 微服务技术对比 服务拆分注意事项 案例 服务远程调用 RestTemplate Eureka注册中心 RestTemplate存在的问题 服务调用考虑的问题 Eureka的作用 搭建EurekaServer 服务注册 …

刷穿力扣(31~60)

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 31. 下一个排列 排列原理就是 C 中的 next_permutation 函数&#xff0c;生成指定序列的下一个全排列从给定序列的最右端开始&#xff0c;找到第一个满足 nums[i] < nums[i 1] 的元素 nums[i]若找不到这…

挑战吧,HarmonyOS应用开发工程师

一年一度属于工程师的专属节日1024&#xff0c;多重活动亮相啦~ 参与活动即有机会获得HUAWEI Freebuds 5i 耳机等精美礼品&#xff01; 点击“阅读原文”查看更多活动详情&#xff01;

算法笔记【8】-合并排序算法

文章目录 一、前言二、合并排序算法基本原理三、实现步骤四、优缺点分析 一、前言 合并排序算法通过采用分治策略和递归思想&#xff0c;实现了高效、稳定的排序功能。本文将深入探讨合并排序算法的原理、实现步骤&#xff0c;并讨论其优缺点。 二、合并排序算法基本原理 合…

双向链表的初步练习

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”…

java集合之List接口实现类常用方法详解

目录 一、List集合概述 二、ArrayList类 三、ArrayList常用方法实例 四、LinkedList类 五、Linkedist常用方法实例 一、List集合概述 java.util.List接口继承自Collection接口&#xff0c;是单列集合的一个分支&#xff0c;通常将实现了List接口的对象称为List集合&#x…

MySQL数据库干货_09—— MySQL中的外键约束(Foreign Key)

外键约束(Foreign Key) 添加外键约束 使用DDL语句添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名(参照的列名);示例一&#xff1a; 创建 departments 表包含 department_id 、department_name &#xff0c;location_id。…

dbeaver配置es连接org.elasticsearch.xpack.sql.jdbc.EsDriver

查看目标es服务版本&#xff0c;下载对应驱动

[UDS] --- CommunicationControl 0x28

1 0x28功能描述 根据ISO14119-1标准中所述&#xff0c;诊断服务28服务主要用于网络中的报文发送与接受&#xff0c;比如控制应用报文的发送与接收&#xff0c;又或是控制网络管理报文的发送与接收&#xff0c;以便满足一定场景下的应用需求。 2 0x28应用场景 一般而言&#…

k8s节点已有镜像,但Pod一直在拉取镜像时卡着

Pod状态为ContainerCreating&#xff0c;查看日志提示pull镜像&#xff0c;但该镜像在Node节点已经存在&#xff0c;且拉取策略为IfNotPresent 解决&#xff1a;重启kubelet

迁移学习 - 微调

什么是与训练和微调&#xff1f; 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先&#xff0c;你需要随机初始化参数&#xff0c;然后开始训练网络&#xff0c;不断调整参数&#xff0c;直到网络的损失越来越小。在训练的过程中&#xff0c;一开始初始化的参数会…

指针相关面试题目

数组名的意义&#xff1a; 1. sizeof( 数组名 ) &#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。 2. & 数组名&#xff0c;这里的数组名表示整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表示首元素的地址。 下…

【地理位置识别】IP归属地应用的特点

IP归属地应用是一类用于确定特定IP地址的地理位置信息&#xff08;通常是城市、地区或国家&#xff09;的工具和服务。以下是IP归属地应用的几个主要特点&#xff1a; 地理位置识别&#xff1a; IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…

【C语言实现扫雷小游戏——可展开一片】

文章目录 1. 游戏分析和设计1.1扫雷游戏的功能说明1.2数据结构的分析与设计 2.代码实现2.1基本框架2.2初始化棋盘2.3打印棋盘2.4布置雷2.4统计周围雷的个数2.5排查雷2.6展开一片 3.完成代码3.1game.h3.2 game.c3.3test.c 学习完了函数和数组&#xff0c;让我们做个扫雷小游戏巩…

评估在线不平衡学习的PAUC

评估在线不平衡学习的PAUC 原始论文《Prequential AUC: properties of the area under the ROC curve for data streams with concept drift》 由于正常的AUC需要计算整体数据集上&#xff0c;每个数据的预测置信度的排名。那么我们首先要求我们的在线学习算法在进行预测时也返…