1亿个整数中选出最大的100个数,要求时间空间复杂度最优,该如何解决
1亿个整数中选出最大的100个数,要求时间空间复杂度最优
如题
------解决方案--------------------
用前100个数建成小顶堆,然后顺序读入后面的数一次跟堆顶元素比较,如果大于堆顶元素,就替换,然后做min-heapify。
空间复杂度O(M),时间复杂度O(NlgM),N就是1亿,M是100.
------解决方案--------------------
思路1:
由于都是整数,可以考虑使用线性的排序算法。如基数排序,计数排序等。
时间复杂度O(n)
思路2:
改造快速排序的patition()函数,使得被选定的值不断靠近100.
平均时间复杂度也接近是O(n)。
如题
------解决方案--------------------
用前100个数建成小顶堆,然后顺序读入后面的数一次跟堆顶元素比较,如果大于堆顶元素,就替换,然后做min-heapify。
空间复杂度O(M),时间复杂度O(NlgM),N就是1亿,M是100.
------解决方案--------------------
思路1:
由于都是整数,可以考虑使用线性的排序算法。如基数排序,计数排序等。
时间复杂度O(n)
思路2:
改造快速排序的patition()函数,使得被选定的值不断靠近100.
平均时间复杂度也接近是O(n)。