public class FindNumK {
public static void main(String[] args) {
int[] arr = {7,5,15,3,17,2,20,24,1,9,12,8};
int k = 5;
System.out.println("------------计算前--------------");
for(int i : arr) {
System.out.print(i + ",");
}
int result = findNumK(arr, k);
System.out.println();
System.out.println("------------计算后--------------");
for(int j : arr) {
System.out.print(j + ",");
}
System.out.println();
System.out.println("-------查找数组第K大的值结果------");
System.out.println(result);
}
private static int findNumK(int[] arr, int k) {
//1. 用前K个元素构建小顶堆
buildHeap(arr, k);
//2. 继续遍历数组,和堆顶比较
for(int i = k ; i<arr.length;i++) {
if(arr[i]>arr[0]) {
arr[0] = arr[i];
downHeap(arr, 0,k);
}
}
//3. 返回堆顶元素
return arr[0];
}
private static void buildHeap(int[] arr, int length) {
//从最后一个非叶子结点开始,依次下沉调整
for(int i = (length-2)/2;i&
java通过最小堆算法实现无序数组查找第K大的数
最新推荐文章于 2022-02-25 20:13:42 发布
本文介绍了如何使用Java编程语言,结合最小堆算法,有效地从无序数组中找出第K大的数值。这种方法通过构建最小堆,保持堆顶元素为数组中最小的K个元素之一,从而在复杂度为O(n log k)的时间内解决问题。
摘要由CSDN通过智能技术生成