Получив этот вопрос, вы сначала задумаетесь о сортировке. После сортировки выберите наибольшее число K. Выбор сортировки Быстрая сортировка — лучший выбор.
Хорошо, давайте примем первое решение: быструю сортировку
Код выглядит следующим образом
Скопируйте код кода следующим образом:
public static void QuickSort(int[] arr, int start, int end) {
если (начало <конец) {
int key = arr[start];
интервал справа = начало;
интервал слева = конец;
в то время как (справа <слева) {
while (right < left && arr[left] > клавиша) {
левый --;
}
если (справа <слева) {
arr[вправо] = arr[влево];
}
while (right < left && arr[right] <= клавиша) {
верно++;
}
если (справа <слева) {
arr[влево] = arr[вправо];
}
}
arr[право] = ключ;
быстрая сортировка (прибытие, начало, вправо-1);
быстрая сортировка (прибытие, влево+1, конец);
}
}
После быстрой сортировки массив будет в порядке. Вышеуказанная сортировка выполняется от меньшего к большему, поэтому наш результат должен быть следующим.
Скопируйте код следующим образом: int k = 4;
for (int i=arr.length-1; i>=arr.length-k; i--) {
System.out.println(arr[i]+" ");
}
. Первое решение уже хорошо, но есть ли способ лучше?
Ответ – да! Мы можем выбрать частичную сортировку, а затем использовать сортировку выбором для решения этой проблемы.
Код выглядит следующим образом:
Скопируйте код следующим образом: public static int[] selectSortK(int[] arr, int k) {
if(arr == null || arr.length == 0) {
вернуть ноль;
}
int[] newArr = новый int[k];
List<Integer> list = new ArrayList<Integer>();//Записываем каждый раз нижний индекс максимального числа
for (int i=0; i<k; i++) {
int maxValue = Integer.MIN_VALUE //Максимальное значение;
ИНТ МаксИндекс = я;
for (int j=0; j<arr.length; j++) {
if (arr[j] > maxValue && !list.contains(j) ) {
maxValue = arr[j];
МаксИндекс = j;
}
}
if (!list.contains(maxIndex)) {//Если он не существует, добавьте его
list.add(maxIndex);
новыйArr[i] = максимальное значение;
}
}
вернуть новыйАрр;
}