Нахождение наибольшего числа K в несортированном массиве - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь найти самые большие числа K, заданные в отсортированном массиве.

например: вход -> [5, 12, 45, 32, 9, 20, 15] выход -> K = 3, [45, 32, 20]

Код, который я написал до сих пор, возвращает наибольший элемент K, но он должен возвращать наибольшие числа K. Любая помощь будет оценена.

public static int max_Numbers(int [] p, int K, int firstNum, int lastNum)
    {
        int pivot = partitionArr(p, firstNum, lastNum);
        int m = p.length - K;
        if (m == pivot)
        {
            return p[pivot];
        }
        if(m > pivot)
        {
            return max_Numbers(p, K, pivot + 1, lastNum);

        }
        else
        {
            return max_Numbers(p, K, firstNum, pivot - 1);
        }
    }

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Одно из свойств используемой вами сводной секции и раздела заключается в том, что после каждого шага разбиения гарантируется, что все элементы перед сводной точкой окажутся меньше или равны сводной, а все элементы после сводной ячейки будут больше.Таким образом, после того, как вы найдете пивот, который является K-й, массив будет иметь наибольшее K после него.

0 голосов
/ 17 марта 2019

Используя ваш отсортированный массив,

for(int i=array.length-1; i>=0 && array.length-1 - i < K; i--) System.out.println(array[i]));
...