Wie print Indizes von 10 kleinsten Werten im Array

8

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

    
Petr Šrámek 02.11.2013, 14:48
quelle

5 Antworten

4
  

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%     
Alexis C. 02.11.2013, 14:51
quelle
2

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:

%Vor%

Sortierung nach value :

%Vor%

Indizes:

%Vor%

Ihr Ansatz mit TreeMap ist in Ordnung. Die einzige Änderung, die Sie vornehmen müssen, sieht so aus:

%Vor%     
Adam Stelmaszczyk 02.11.2013 14:53
quelle
1

Erstellen Sie eine einfache Klasse für zwei Eingaben oder verwenden Sie Generika für einen beliebigen Wert:

%Vor%

Und nutzen Sie Collections.sort .

%Vor%

Ausgabe:

%Vor%     
azz 02.11.2013 15:06
quelle
0

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%     
Ankit Rustagi 02.11.2013 14:57
quelle
0

kurze Lösung:

  1. Erzeuge ein Array von Indizes (einfach für eine zu initialisierende Schleife).

  2. 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.

  3. 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.

hyde 02.11.2013 15:04
quelle

Tags und Links