|  |      1ballshapesdsd OP 有人没 | 
|  |      2crazybug      2017-10-21 17:16:06 +08:00 via Android 不是大神瞎扯句。去重,排序。 | 
|  |      3cabbage      2017-10-21 17:19:52 +08:00 via Android 不是大神随便说说,hash 表 | 
|  |      4Shura      2017-10-21 17:24:37 +08:00 via Android 大根堆,不考虑建堆时间 | 
|  |      6ballshapesdsd OP @Shura 其实就是求前 k 大的数所在的位置。。之前用 python 的 heapq.nlargest,很慢,刚才发现 numpy 自带的 sort 和 c++的 BFPRT 算法效率差不多,甚至还更快。。所以就愉快的用 numpy 的 sort 了 | 
|  |      7geelaw      2017-10-21 17:38:47 +08:00 via iPhone 那你可以特判一下有很多相等的情况……原因和 naive 快排有相等元素可能变慢一样。 另一个方法是让两者强行不想等,比如额外记录原来的位置。但这样牺牲比较大。 | 
|  |      8ballshapesdsd OP | 
|      9victor97      2017-10-21 19:01:14 +08:00 via Android  1 基于快排的思路。 根据快排基准数的位置大于还是小于 k,决定是在前半部分还是后半部分继续找。 由于每次只看一边,所以时间复杂度是 O(n)。 | 
|  |      10churchmice      2017-10-21 19:10:18 +08:00 via Android 有种数据结构叫最大 /最小堆 | 
|  |      11ballshapesdsd OP @victor97 这个算法的基准数不是随机选的,比较复杂 | 
|      12zzj0311      2017-10-21 19:20:00 +08:00 via Android @ballshapesdsd 随不随机都是可以的~ | 
|      13srlp      2017-10-21 19:41:34 +08:00 via iPhone 日常 quickselect 够用了,平均 n,最差 n^2 | 
|  |      14liuminghao233      2017-10-21 19:48:47 +08:00 via iPhone 无论如何也要排序吧 On 是不可能 On 的除非已经排好的数 一般快排或堆排 | 
|  |      15bumz      2017-10-21 19:52:15 +08:00 分而治之 | 
|  |      16lengyihan      2017-10-22 01:02:28 +08:00 via Android 楼主是学生吧,在学算法, |