关于最大最小的k个数的类型题总结

堆排序选前K个数
本文介绍如何使用大顶堆和小顶堆选择数组中最大的前K个数和最小的前K个数。通过构建特定类型的堆,可以高效地找到目标数值。适用于需要快速筛选数据的场景。

返回最小的前k个数

https://www.cnblogs.com/shaer/p/10486383.html

返回最大的前k个数

https://www.cnblogs.com/shaer/p/10424065.html

1、大顶堆:每个节点的值都大于等于其左右孩子节点的值

     小顶堆:每个节点的值都小于等于其左右孩子节点的值

2、选择最大的K个数

用PriorityQueue默认是自然顺序排序,要选择最大的k个数,构造小顶堆,每次取数组中剩余数与堆顶的元素进行比较,如果新数比堆顶元素大,则删除堆顶元素,并添加这个新数到堆中。

程序如下:程序是找到第k大的值,如果是最大的前k个数的值,定义一个集合保存就行。

3、选择最小的K个数

选择最小的k个数可以用冒泡排序,复杂度为O(n*k),有点高。 
要选择最小的K个数使用大顶堆,每次取数组中剩余数与堆顶的元素进行比较,如果新数比堆顶元素小,则删除堆顶元素,并添加这个新数到堆中。

要找前k个最小数,则构建大顶堆,要重写compare方法

转载于:https://www.cnblogs.com/shaer/p/10486702.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值