Nachdem Sie diese Frage erhalten haben, denken Sie zunächst an die Sortierung. Wählen Sie nach der Sortierung die größte K-Zahl aus. Sortierauswahl Eine schnelle Sortierung ist die bessere Wahl.
Okay, machen wir uns an die erste Lösung: schnelle Sortierung
Der Code lautet wie folgt
Kopieren Sie den Codecode wie folgt:
public static void quickSort(int[] arr, int start, int end) {
if (Anfang < Ende) {
int key = arr[start];
int right = start;
int left = end;
while (rechts < links) {
while (right < left && arr[left] > key) {
links --;
}
if (rechts < links) {
arr[rechts] = arr[links];
}
while (right < left && arr[right] <= key) {
richtig++;
}
if (rechts < links) {
arr[links] = arr[rechts];
}
}
arr[right] = Schlüssel;
quickSort(arr, start, right-1);
quickSort(arr, left+1, end);
}
}
Nach der schnellen Sortierung ist das Array in Ordnung. Die obige Sortierung erfolgt von klein nach groß, daher sollte unsere Ausgabe wie folgt aussehen
Kopieren Sie den Code wie folgt: int k = 4;
for (int i=arr.length-1; i>=arr.length-k; i--) {
System.out.println(arr[i]+" ");
}
. Die erste Lösung ist schon gut, aber gibt es einen besseren Weg?
Die Antwort ist ja! Wir können eine Teilsortierung wählen und dann die Auswahlsortierung verwenden, um dieses Problem zu lösen.
Der Code lautet wie folgt:
Kopieren Sie den Code wie folgt: public static int[] selectSortK(int[] arr, int k) {
if(arr == null || arr.length == 0) {
null zurückgeben;
}
int[] newArr = new int[k];
List<Integer> list = new ArrayList<Integer>();// Zeichnen Sie jedes Mal den Index der maximalen Zahl auf
for (int i=0; i<k; i++) {
int maxValue = Integer.MIN_VALUE; //Maximalwert
int maxIndex = i;
for (int j=0; j<arr.length; j++) {
if (arr[j] > maxValue && !list.contains(j) ) {
maxValue = arr[j];
maxIndex = j;
}
}
if (!list.contains(maxIndex)) {//Wenn es nicht existiert, fügen Sie es hinzu
list.add(maxIndex);
newArr[i] = maxValue;
}
}
return newArr;
}