支持优先级的队列

系列文章目录

前言

本人最近再练习算法,所以会发布一些解题思路,希望大家多指教

一、题目描述

实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。
如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。
队列存储的数据内容是一个整数。

二、输入描述

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

三、输出描述

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

四、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)
输出:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值