Algorithm 如何转换具有0(n log k)的数组?
输入:由n个整数和k个值(k组成的数组A除了数组外,还保持一个最大堆,其中包含迄今为止看到的k个最小元素 然后从左向右扫描数组,如果数组中的当前元素小于堆中最顶端的元素,则删除最顶端的元素并插入此新元素(在log(k)time中) 数组B应在每一步由堆中最顶端的元素填充 在您的示例中,最初堆是空的Algorithm 如何转换具有0(n log k)的数组?,algorithm,converter,Algorithm,Converter,输入:由n个整数和k个值(k组成的数组A除了数组外,还保持一个最大堆,其中包含迄今为止看到的k个最小元素 然后从左向右扫描数组,如果数组中的当前元素小于堆中最顶端的元素,则删除最顶端的元素并插入此新元素(在log(k)time中) 数组B应在每一步由堆中最顶端的元素填充 在您的示例中,最初堆是空的 扫描2。堆包含2,B[1]=0 扫描-3。堆现在是: ..2 -3 B[2]=0 扫描5.堆现在为: …5 -3.2 B[3]=5 扫描1。堆现在为: …2 -31 B[4]=2. 等等 谢谢你编辑它
..2
-3
B[2]=0
…5
-3.2
B[3]=5
…2
-31
B[4]=2.
等等
谢谢你编辑它以显示隐藏文本Harold你能更精确地定义数组B吗?我怀疑这应该有一个副本,但我找不到它。示例[0,0,-3,-3,-3]中的B不应该吗?@csbalazs:不,给出的数组B是正确的。它包含了迄今为止看到的第k个最小的数字。这看起来是我需要的。非常感谢。爱你们haha@Adam如果这回答了您的问题,请随意将其标记为正确。
B[i]{ if i<k = 0
else k-th smallest number of A[1...i]
A: 2 -3 5 1 6
k=3
B: 0 0 5 2 2