热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

获取数组中最小的K个数

本文提供了一种使用Java优先队列(即堆)实现的方法,用于从给定数组中找出最小的K个元素。通过构建一个最大堆来维护这K个最小值,最终返回这些数值。

在解决如何从一个整数数组中找到最小的K个数的问题时,我们可以利用Java中的优先队列(PriorityQueue)来实现这一功能。优先队列是一种特殊的队列,删除操作总是移除具有最高优先级的元素。



class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
// 如果k为0或数组为空,则直接返回空数组
if (k == 0 || arr.length == 0) {
return new int[0];
}

// 使用最大堆来存储最小的k个数
Queue maxHeap = new PriorityQueue<>((a, b) -> b - a);

// 遍历数组,将元素加入到堆中
for (int num : arr) {
if (maxHeap.size() maxHeap.offer(num);
} else if (num maxHeap.poll();
maxHeap.offer(num);
}
}

// 将堆中的元素转换成数组返回
int[] result = new int[maxHeap.size()];
int index = 0;
for (int num : maxHeap) {
result[index++] = num;
}
return result;
}
}

上述代码首先检查了输入参数的有效性,确保了当请求的数量为0或输入数组为空时能够正确处理。接着,它创建了一个最大堆,并通过遍历输入数组来填充这个堆。对于每一个新元素,如果当前堆的大小小于k,则直接将其加入堆中;否则,只有当新元素小于堆顶元素时,才会替换掉堆顶元素。最后,将堆中的所有元素转移到一个新的数组中并返回。


推荐阅读
author-avatar
白羊座的张康安_3z2_381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有