查找未排序数组中的最大K数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找未排序数组中的最大K数相关的知识,希望对你有一定的参考价值。

我试图找到给定排序数组的最大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);
        }
    }
答案

使用排序的数组,

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

您正在使用的枢轴和分区的一个属性是,在每个分区步骤之后,保证枢轴之前的所有元素都小于或等于枢轴,并且枢轴之后的所有元素都更大。因此,在找到第K个数据透视表之后,数组将在其后面具有最大的K.

以上是关于查找未排序数组中的最大K数的主要内容,如果未能解决你的问题,请参考以下文章

如何查找无序数组中的Top n

快排查找数组中的第K个最大元素

数组中的第K个最大元素--力扣

基于快速排序的查找前K个最大数

数组中的第K个最大元素 优先队列

未排序长度 n 数组中 k 个最大元素的索引