从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题
https://mp.weixin.qq.com/s/FFsvWXiaZK96PtUg-mmtEw
-
全局排序,O(n*lg(n))
-
局部排序,只排序TopK个数,O(n*k)
-
堆,TopK个数也不排序了,O(n*lg(k))
-
分治法,每个分支“都要”递归,例如:快速排序,O(n*lg(n))
-
减治法,“只要”递归一个分支,例如:二分查找O(lg(n)),随机选择O(n)
-
TopK的另一个解法:随机选择+partition