输入:n个整数的数组A和k值(k <= n)
输出:1D阵列B
B[i]{ if i<k = 0
else k-th smallest number of A[1...i]
B应该具有A [1]到A [i]中最小值的第3个值,但如果i<k
B值为0
O(nlogk)
示例:
A: 2 -3 5 1 6
k=3
B: 0 0 5 2 2
答案 0 :(得分:2)
除了数组外,还要维护一个包含目前为止看到的k个最小元素的最大堆。
然后从let到右扫描数组,如果数组中的当前元素小于堆中最顶层的元素,则删除最顶层的元素并插入这个新元素(在log(k)时间内)
阵列B应由每一步中堆中最顶层的元素填充。
在您的示例中,最初堆是空的。