剑指 Offer 40. 最小的k个数(堆排序法)

编程入门 行业动态 更新时间:2024-10-07 06:44:42

<a href=https://www.elefans.com/category/jswz/34/1769662.html style=剑指 Offer 40. 最小的k个数(堆排序法)"/>

剑指 Offer 40. 最小的k个数(堆排序法)

用sort的方法就不写了,没有什么意义
下面代码为堆排序的解法
思路都在代码注解中了,用堆挺简单的,还是调用API,没什么要说的
注意要重优先队列的比较方法

public int[] getLeastNumbers(int[] arr, int k) {if (k == 0){return new int[0];}/** 创建一个大根堆,size为k,将数组元素存入堆中,* 如果比堆顶还要到,就直接跳过,* 如果比堆顶小,就将堆底弹出,将该数放出堆中*/PriorityQueue<Integer> priorityQueue = new PriorityQueue<>((v1,v2) -> v2 - v1);for (int i :arr) {if (priorityQueue.size() < k)   priorityQueue.add(i);else if (priorityQueue.peek() > i){priorityQueue.poll();priorityQueue.add(i);}}/** 取出对顶元素*/int[] result = new int[priorityQueue.size()];int i = 0;for (int res:priorityQueue) {result[i++] = res;}return result;

更多推荐

剑指 Offer 40. 最小的k个数(堆排序法)

本文发布于:2024-02-28 14:53:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769671.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:剑指   个数   最小   Offer

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!