最新华为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
输入:
(10,1),(20,1),(30,2),(40,3)
- 将四个数据依次入队。其优先级分别是
1,1,2,3
。 - 输出顺序按优先级排序:
40
(优先级3),30
(优先级2),10
和20
(优先级1,按输入顺序)。 - 输出结果:
40,30,10,20
示例2
输入:
(10,1),(10,1),(30,2),(40,3)
- 将数据入队时,发现两个
(10,1)
内容和优先级都相同,丢弃后一个。 - 按优先级排序后:
40
(优先级3),30
(优先级2),10
(优先级1)。 - 输出结果:
40,30,