Hier ist eine allgemeine Implementierung einer Hilfsklasse für die Suche nach den niedrigsten X ganzen Zahlen verwenden.
Mit drei Spalten werden drei Instanzen der Hilfsklasse erstellt, und die Daten werden anschließend iteriert, um die 3 niedrigsten Werte für jede Spalte zu erfassen.
Die Vorteile dieses Codes sind:
- behält nur die niedrigsten X-Werte
- nicht die ganzen Zahlen
- verwendet binäre Suche für eine verbesserte Leistung von höheren Werten von X
zu boxen Braucht
Dies bedeutet, dass es schnell sein sollte und einen geringen Speicherbedarf haben sollte, der unbegrenzte Datenmengen unterstützt (wenn gestreamt wird).
Eine Demo finden Sie unter IDEONE.
import java.util.Arrays;
class Ideone {
private static final int MIN_COUNT = 3;
public static void main(String[] args) {
int[][] data = { { 74, 85, 123 },
{ 73, 84, 122 },
{ 72, 83, 121 },
{ 70, 81, 119 },
{ 69, 80, 118 },
{ 76, 87, 125 },
{ 77, 88, 126 },
{ 78, 89, 127 } };
// Initialize min collectors
Min[] min = new Min[data[0].length];
for (int col = 0; col < min.length; col++)
min[col] = new Min(MIN_COUNT);
// Collect data
for (int row = 0; row < data.length; row++)
for (int col = 0; col < min.length; col++)
min[col].add(data[row][col]);
// Print result
for (int i = 0; i < MIN_COUNT; i++) {
for (int col = 0; col < min.length; col++)
System.out.printf("min%d = %-5d ", i + 1, min[col].get(i));
System.out.println();
}
}
}
class Min {
private int[] min;
public Min(int count) {
this.min = new int[count];
Arrays.fill(this.min, Integer.MAX_VALUE);
}
public void add(int value) {
int idx = Arrays.binarySearch(this.min, value);
if (idx != -this.min.length - 1) { // not insert at end
if (idx < 0)
idx = -idx - 1;
System.arraycopy(this.min, idx, this.min, idx + 1, this.min.length - idx - 1);
this.min[idx] = value;
}
}
public int get(int index) {
return this.min[index];
}
}
Sorry, aber ich bin mir nicht sicher, was Sie fragen. Können Sie das Problem klären, vor dem Sie stehen? Was meinst du mit "Ergebnisse sind nicht effizient"? – Pshemo
Versuchen Sie, die drei kleinsten Elemente in jeder Spalte zu finden? –
@ PM77-1 Ich denke, dass was OP brauchen, aber seine Datenstruktur und Frage ist ein bisschen unklar. –