返回最小的前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方法