Ich brauche 10 kleinste Zahlen aus dem Array (mit 2 000 Elementen) und drucke ihre Indizes.
Zuerst habe ich versucht, dieses Array zu sortieren und das Werte-Array [0 bis 9] zu drucken. Es waren die kleinsten Zahlen, aber ich verlor Indizes dieser Werte, die sie hatten ich nicht sortierte Array.
Zweite Option wurde versucht, treeMap, die gut funktioniert, aber wenn ich zwei gleiche Schlüssel habe drucken sie nur eine von ihnen, aber ich muss beide drucken.
Beispiel für die Verwendung von Code mit treeMap:
%Vor%Bis jetzt benutze ich keine treeMap, also ist es möglich, dass es einen einfachen Weg gibt, wie man es reparieren kann. Oder ist besser etwas anderes zu benutzen?
Ich werde für jede Hilfe dankbar sein
Es waren die kleinsten Zahlen, aber ich verlor Indizes dieser Werte, die Sie hatten ich nicht sortierte Array
Warum erstellen Sie nicht einfach eine Klasse, um diese Indizes zu halten? Dann sortiere einfach dein Array nach Wert und du bekommst den Index zugeordnet.
%Vor% %Vor%Hinweis:
Wenn Sie Objekte mit dem gleichen Wert nach Indizes sortieren möchten, können Sie Ihren Vergleicher wie folgt ändern:
%Vor%Ausgabe (mit der zweiten Methode
compareTo
):
%Vor%
Anstatt nackte Werte zu sortieren, sortieren Sie (value, index)
pairs in Bezug auf value
.
Dann nehmen Sie einfach die ersten 10 Paare und Sie haben 10 Ursprungsindizes.
Sie möchten zum Beispiel sortieren:
%Vor%% (value, index)
Paare machen:
Sortierung nach value
:
Indizes:
%Vor% Ihr Ansatz mit TreeMap
ist in Ordnung. Die einzige Änderung, die Sie vornehmen müssen, sieht so aus:
Sie könnten dies mit einer leicht modifizierten Schnellsortierung tun, während Sie das Array sortieren, wenn Sie auch das Indexarray austauschen, dann würde es den Trick machen
%Vor%Hier machen wir die Änderung
%Vor%kurze Lösung:
Erzeuge ein Array von Indizes (einfach für eine zu initialisierende Schleife).
Sortieren Sie das Indexarray mit der benutzerdefinierten Vergleichsfunktion, die die Werte für den Index im anderen Array vergleicht. Hinweis: Verwenden Sie eine stabile Sortierung, wenn Sie Indizes in der richtigen Reihenfolge drucken möchten.
Iteriere das sortierte Index-Array, drucke Indizes und zähle verschiedene Werte (erhöhe den Zähler, wenn sich der Wert ändert), stoppe wenn der Zähler 11 wird.