龙空技术网

算法:如何求出无序数组的第K个最大的元素

It旅者 327

前言:

现时我们对“求第k大元素”大约比较着重,大家都想要剖析一些“求第k大元素”的相关内容。那么小编也在网络上网罗了一些关于“求第k大元素””的相关文章,希望你们能喜欢,看官们快快来了解一下吧!

面试过程中经常会被问到一些算法问题,所以准备换工作的同学,还是需要准备点基本算法思想的,今天的主题是一个比较常见的算法题,我们来看一下这个算法题有哪些实现的手段。

方式一:对无序数组进行有序化处理,处理完后根据条件获取对应的下标值即可(这个方案是一般有点基础的人都能想到的,这里就不列出代码了)

方式二:方法一的算法在数据量比较大的情况下,效率是个问题,所以我们可以优化一下思路,利用快排的思想进行优化。程序如下:

方式三:利用堆的思想解决这类问题,利用jdk自有的 PriorityQueue 来实现。

/**

* 如何求出无序数组的第K个最大的元素

*

* @param nums

* @param k

* @return

*/

public static int maxK(int[] nums, int k) {

PriorityQueue<Integer> queue = new PriorityQueue<>();

for (int n : nums) {

queue.add(n);

if (queue.size() > k) {

queue.poll();

}

}

return queue.poll();

}

标签: #求第k大元素