对k-排序数组进行排序的一个很好的解决方案(每个元素最远离目标位置k),
1) Create a Min Heap of size k+1 with first k+1 elements. This will take O(k) time.
2) One by one remove min element from heap, put it in result array, and add a new element to heap from remaining elements.
overall complexity will be O(k) + O((n-k)*logK)
我无法理解使用堆技术进行k排序的数组的相关性。即使阵列没有进行k排序,这也不会起作用吗?
答案 0 :(得分:2)
当然,当数组未进行k排序时,这将不起作用。
因为排序后的第一个元素将始终是第一个k + 1个元素中的最小元素,依此类推。
@leventov向我们展示了一个例子。
答案 1 :(得分:1)
答:从数组中找到k个最小的数字(不一定是排序的):
您认为在O(k) + O((n-k)*logK)
时间内完美运行的方法。
B:排序数组:
你可以在每一步找到大小为k的堆中的最小数字,但是如果数组中的最小数字位于索引k + 2怎么办?
您将无法将其放置在算法的第一步中,直到您插入它为止,您将输出2个数字,声称它们比原始最小值<
。
所以,你肯定希望让他们从排序位置移开not more than k
。