Ändern Sie priorityQueue in die maximale Prioritätswarteschlange
Habe ich priority-queue in Java Ganzzahlen:
PriorityQueue<Integer> pq= new PriorityQueue<Integer>();
Wenn ich rufe pq.poll()
ich bekomme das minimale element.
Frage: wie ändern Sie den code, um das maximale element?
Kommentar zu dem Problem
Ich denke, Sie sollten verwenden Sie den Konstruktor, der erhält einen Komparator. Nutzung der Sammlungen.reverseOrder erhalten Sie eine umgekehrte Komparator.
du musst einen comparator. siehe stackoverflow.com/questions/683041/...
InformationsquelleAutor der Frage Borut Flis | 2012-06-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie etwa wie diese:
Den
Collections.reverseOrder()
bietet eineComparator
würde Sortieren Sie die Elemente in derPriorityQueue
in die entgegengesetzte Reihenfolge Ihrer natürlichen Reihenfolge, in diesem Fall.InformationsquelleAutor der Antwort Edwin Dalorzo
Können Sie lambda-Ausdruck, da Java 8.
Dem folgenden code wird 10 ausgeben, die größer sind.
Lambda-Funktion zwei Ganzzahlen als Eingabe-Parameter, subtrahieren Sie von einander, und die arithmetische Folge. Die lambda-Funktion implementiert, die Funktionale Schnittstelle
Comparator<T>
. (Dies wird in Ort, als Gegensatz zu einer anonymen Klasse oder eine diskrete Umsetzung.)InformationsquelleAutor der Antwort Guangtong Shen
Können Sie eine benutzerdefinierte
Comparator
Objekt-Reihen in umgekehrter Reihenfolge:Nun, die Priorität umkehren wird, alle seine Vergleiche, so erhalten Sie die maximale element und nicht als das minimale element.
Hoffe, das hilft!
InformationsquelleAutor der Antwort templatetypedef
InformationsquelleAutor der Antwort Varun Juneja
Die Elemente der priority-queue sind, geordnet nach Ihrer natürlichen Reihenfolge oder mit einem Komparator bereitgestellt, an der Warteschlange der Bauzeit.
Den Komparator sollte das überschreiben der Methode vergleichen.
Standard-compare-Methode gibt eine negative ganze Zahl, null oder eine positive ganze Zahl als das erste argument kleiner, gleich oder größer als das zweite.
Den Standard-PriorityQueue zur Verfügung gestellt von Java ist die Min-Heap, Wenn Sie möchten, dass ein max-heap folgenden ist der code
Referenz :https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html#comparator()
InformationsquelleAutor der Antwort rohan
Hier ist eine Beispiel-Max-Heap in Java :
Ist die Ausgabe 10
InformationsquelleAutor der Antwort Nobal
Können Sie
MinMaxPriorityQueue
(es ist ein Teil der Guava-Bibliothek):hier ist die Dokumentation. Statt
poll()
, müssen Sie rufen Sie diepollLast()
Methode.InformationsquelleAutor der Antwort Chthonic Project
Ich lief ein Monte-Carlo-simulation auf beide Komparatoren auf Doppel-heap-sort, min, max, und Sie beide kamen zu dem gleichen Ergebnis:
Diese sind das max Komparatoren, die ich verwendet habe:
(A) Sammlungen eingebauten Komparator
(B) Benutzerdefinierte Komparator -
InformationsquelleAutor der Antwort sivi
Können Sie versuchen, schieben Elemente mit umgekehrtem Vorzeichen. Eg: hinzufügen a=2 & b=5 und dann poll b=5.
Sobald Sie Umfrage der Kopf der Schlange, in umgekehrter Zeichen für Ihre Nutzung.
Dies wird print 5 (größere element). Kann verwendet werden in naiven Implementierungen. Definitiv nicht zuverlässig beheben. Ich empfehle es nicht.
InformationsquelleAutor der Antwort striker28
Können Sie versuchen so etwas wie:
Die funktioniert auch für jede andere Basis Vergleich-Funktion, die Sie haben könnten.
InformationsquelleAutor der Antwort Horia Coman