从arr[1, n]数组中,找出最大的k个数;
思路
时间复杂度:O(n*lg(k))
- 先根据k个元素生成小顶堆,这个小顶堆用来存储当前topk个元素;
- 再从k+1个元素开始扫描,和堆顶最小值比较,如果新增元素大于堆顶,则替换堆顶元素,并重新调整堆顶,以保证堆内k个元素是最大的元素;
- 直到扫描到最后一个元素,最终堆里的元素即是topk了;
如图所示:
php代码实现
1 | class Topk |
结果:
1 | 原始数据: |
曾梦想仗剑走天涯 看一看世界的繁华
从arr[1, n]数组中,找出最大的k个数;
时间复杂度:O(n*lg(k))
- 先根据k个元素生成小顶堆,这个小顶堆用来存储当前topk个元素;
- 再从k+1个元素开始扫描,和堆顶最小值比较,如果新增元素大于堆顶,则替换堆顶元素,并重新调整堆顶,以保证堆内k个元素是最大的元素;
- 直到扫描到最后一个元素,最终堆里的元素即是topk了;
1 | class Topk |
1 | 原始数据: |
WeChat Pay