系列文章目录
前言
本人最近再练习算法,所以会发布一些解题思路,希望大家多指教
一、题目描述
实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。
如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。
队列存储的数据内容是一个整数。
二、输入描述
一组待存入队列的数据(包含内容和优先级)。
三、输出描述
队列的数据内容(优先级信息输出时不再体现)。
四、Java代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] next = scanner.next().replace("(", "").replace(")","").split(",");
//通过链表来保证数据插入的有序性
LinkedList<int[]> list = new LinkedList<>();
for (String str : next) {
String[] split = str.split(":");
//内容
int text = Integer.parseInt(split[0]);
//优先级
int priority = Integer.parseInt(split[1]);
list.add(new int[]{text, priority});
}
//按照优先级倒序排序
list.sort(((o1, o2) -> o2[1] - o1[1]));
StringJoiner joiner = new StringJoiner(",");
for (int i = 0; i < list.size(); i++) {
int j = i+1;
//过滤掉两个内容和优先级一样的,但是位于后面位置的内容
if (j < list.size() && list.get(i)[0] == list.get(j)[0] && list.get(i)[1] == list.get(j)[1]) {
continue;
}
joiner.add(String.valueOf(list.get(i)[0]));
}
System.out.println(joiner);
}
五、测试用例
输入:(100:1),(200:2),(300:3),(400:3)
输出: