[华为OD]实现一个支持优先级的队列,高优先级先出队列 100

devtools/2024/10/20 13:57:03/

题目:

实现一个支持优先级的队列,高优先级先出队列;同优先级时先进先出。

如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。

队列存储的数据内容是一个整数。

输入描述:

一组待存入队列的数据(包含内容和优先级)

输出描述:

队列的数据内容(优先级信息输出时不再体现)

补充说明:

不用考虑输入数据不合法的情况,测试数据不超过 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 构成重复数据,被丢

弃一个

题解:

需要构造对象,对象里面三个元素,输入数据,优先级,和输入位置。

然后重写equals方法,采用set集合去重和compareTo 排序方法,再排序输入在list中,输出需要的值就可以了

import java.util.Objects;public class Data implements Comparable<Data> {private int index;private int value;private int height;public Data(int value, int height, int index) {this.index = index;this.value = value;this.height = height;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Data data = (Data) o;return value == data.value &&height == data.height;}@Overridepublic int hashCode() {return Objects.hash(value, height);}@Overridepublic int compareTo(Data o) {if (this.height != o.height) return o.height - this.height;return this.index - o.index;}
}
import java.util.*;
import java.util.stream.Collectors;public class PriQueue {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();String[] stArr = str.substring(1, str.length() - 1).split("\\),\\(");Set<Data> dataSet = new HashSet<>();for (int i = 0; i < stArr.length; i++) {String[] art = stArr[i].split(",");Data data = new Data(Integer.valueOf(art[0]), Integer.valueOf(art[1]), i);if(!dataSet.contains(data)){dataSet.add(data);}}List<Data> dataList = dataSet.stream().sorted().collect(Collectors.toList());StringBuilder sb = new StringBuilder();for (int i = 0; i < dataList.size(); i++) {if (i != 0) sb.append(",");sb.append(dataList.get(i).getValue());}System.out.println(sb.toString());}
}

验证结果:


http://www.ppmy.cn/devtools/27456.html

相关文章

【ARM 裸机】BSP 工程管理

回顾一下上一节&#xff1a;【ARM 裸机】NXP 官方 SDK 使用&#xff0c;我们发现工程文件夹里面各种文件非常凌乱&#xff1b; 那么为了模块化整理代码&#xff0c;使得同一个属性的文件存放在同一个目录里面&#xff0c;所以学习 BSP 工程管理非常有必要。 1、准备工作 新建…

2024-04-30 区块链-以太坊-相关文档

摘要: 2024-04-30 区块链-以太坊-文档 以太坊-相关文档: https://github.com/ethereum/go-ethereum https://geth.ethereum.org/ https://geth.ethereum.org/docs https://ethereum.org/zh/ 以太坊开发文档 | ethereum.org 以太坊开发文档_w3cschool 以太坊开发文档 基础主题 …

JavaScript全套检验系统(LIS)源码C# + MVC + SQLserver + Redis 云LIS系统源码 区域医疗云LIS系统源码

JavaScript全套检验系统&#xff08;LIS&#xff09;源码C# MVC SQLserver Redis 云LIS系统源码 区域医疗云LIS系统源码 实验室信息系统&#xff08;Laboratory Information System&#xff0c;缩写LIS&#xff09;是一类用来处理实验室过程信息的软件。这套系统通常与其他信…

Ansible playbook之变量引用

1.Ansible facts facts是一个用于采集被管理机器设备信息的一个组件&#xff0c;我们可以使用setup模块查机器的所有facts信息&#xff0c;可以使用filter来查看指定信息。 [rootansible01 ~]# ansible 11.0.1.19 -m setup 11.0.1.19 | SUCCESS > {"ansible_facts&quo…

【大前端】ECharts 绘制立体柱状图

立体柱状图分为&#xff1a; 纯色立体柱状图渐变立体柱状图 常用实现方式 纯色立体柱状图 纯色立体柱状图&#xff0c;使用MarkPoint和颜色渐变就实现&#xff0c;如下代码 import * as echarts from "echarts";var chartDom document.getElementById("main&…

【docker】Docker开启远程访问

将构建的镜像自动上传到服务器。 需要开放 Docker 的端口&#xff0c;让我们在本地能连接上服务器的 Docker&#xff0c;这样&#xff0c;才能上传构建的镜像给 Docker。 开启远程访问 首先在服务器打开 Docker 的服务文件 vim /usr/lib/systemd/system/docker.service修改…

在 Python 中使用 PyPDF2 向 PDF 文件批量添加水印

目录&#xff1a; 使用 PyPDF2 添加水印到 PDF 文件批量添加水印到 PDF 文件所有页 PDF 文件广泛用于不同的设备和平台上&#xff0c;在某些情况下&#xff0c;可能需要在 PDF 文件中申明版权&#xff0c;需要将水印、条形码、二维码等添加到 PDF 中。PyPDF2 提供了一种将另一个…

面试笔记——多线程使用场景

线程池使用场景&#xff08;CountDownLatch&#xff0c; Future&#xff09; CountDownLatch CountDownLatch&#xff08;闭锁/倒计时锁&#xff09;用来进行线程同步协作&#xff0c;等待所有线程完成倒计时&#xff08;一个或者多个线程&#xff0c;等待其他多个线程完成某件…