求数组中最小的k个数

Posted thewinter

tags:

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

import java.util.*;
public class Solution {
   public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
       ArrayList<Integer> result = new ArrayList<Integer>();
       int length = input.length;
       if(k > length || k == 0){
           return result;
       }
       //定义大顶堆
        PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(k, (o1,o2)->o2.compareTo(o1));
       //该堆始终维护k个元素,出现比当前堆顶小的元素,那就干掉,重新调整堆
        for (int i = 0; i < length; i++) {
            if (maxHeap.size() != k) {
                maxHeap.offer(input[i]);
            } else if (maxHeap.peek() > input[i]) {
                maxHeap.poll();
                maxHeap.offer(input[i]);
            }
        }
        for (Integer integer : maxHeap) {
            result.add(integer);
        }
        return result;
    }
}

 

以上是关于求数组中最小的k个数的主要内容,如果未能解决你的问题,请参考以下文章

算法-求两个有序数组两两相加的值最小的K个数

求最小的k个数

输入一个数组,求最小的K个数

求最小的k个数

《程序员代码面试指南》第八章 数组和矩阵问题 找到无序数组中最小的k 个数

求c++程序 算出a[100]数组里面的最大的10个数,速度最快