关于最大最小的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方法

猜你喜欢

转载自www.cnblogs.com/shaer/p/10486702.html