在排序优先级队列整数时遇到问题[关闭]

Posted

技术标签:

【中文标题】在排序优先级队列整数时遇到问题[关闭]【英文标题】:have a problem sorting priority queue integers [closed] 【发布时间】:2020-11-16 16:04:15 【问题描述】:

你好,我想知道我的代码有什么问题: 它应该有这样的输出:

在这个问题中我需要通过添加元素、删除元素、优先队列的大小、打印队列和队列的顶部元素来实现不同的队列操作

输入格式

输入的第一行包含一个整数 T,表示测试用例的数量。对于每个测试用例,输入的第一行包含一个整数 Q,表示查询的数量,然后是 Q 空格分隔的查询。查询可以是以下类型:

1.x(将x加入优先队列并打印队列)

2.(从优先队列顶部移除元素并打印该元素)

3.(获取优先队列顶部的元素)

4.(获取优先队列的大小)

5.(打印优先队列)

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

class Solution 

    public static void main(String args[]) 
        Scanner scanner= new Scanner(System.in);
        int T=scanner.nextInt();
        int i=0;
        int Q=scanner.nextInt();
        System.out.println();
        PriorityQueue<Integer>pq=new PriorityQueue<>(new Comparator<Integer>() 
            @Override
            public int compare(Integer o1, Integer o2) 
                return o2.compareTo(o1);
            
        );
        while (i<T)
            for (int j = 0; j < Q; j++) 


                int query=scanner.nextInt();

                switch (query)
                    case 1:

                        pq.add(scanner.nextInt());
                        System.out.println(pq.toString().replace("[","").replace("]","").replace(",",""));
                        break;
                    case 2:
                        System.out.println(pq.poll());
                        break;
                    case 3:

                        System.out.println(pq.peek());
                        break;
                    case 4:
                        System.out.println(pq.size());
                        break;
                    case 5:
                        System.out.println(pq.toString().replace("[","").replace("]","").replace(",",""));
                    default:
                        break;
                
            i++;
        


但是当我运行我的代码时,它会给我这样的输出:

【问题讨论】:

请don't post your code/error messages/expected output as images。首先,我们要复制/粘贴它,其次搜索引擎无法索引该信息。因此,请确保任何文本信息实际上是以文本形式提供的。 【参考方案1】:

您的队列打印代码有问题,请尝试以下代码:

public static void printQueue(PriorityQueue<Integer> p1)

    PriorityQueue<Integer> p2 = new PriorityQueue<>(p1);

    while (!p2.isEmpty())
    
        System.out.print(p2.poll() + " ");
    

    System.out.println();

你可以在这里找到解释:

PriorityQueue.toString wrong element order

【讨论】:

以上是关于在排序优先级队列整数时遇到问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Azure WebJobs 在监控多个队列时如何对消息进行优先级排序?

什么是堆排序和优先队列? [关闭]

按降序对对象数组进行排序[关闭]

优先级队列(从头开始)和链表

漫谈算法2优先队列与堆排序

HUOJ排序(queue 优先队列)