我有一个关于使用min-heap查找第k个最大元素的问题。算法如下:
我们采用前k个元素并构建一个minheap
设Sk是S中的最小元素。
从剩余的n-k元素中查看一个新元素。
如果新元素大于Sk,则在S中替换它,并重新排序堆。
S然后会有一个新的最小元素。
在查看所有其他元素之后,Sk就是答案
我不明白这个算法。例如,让数字为1,2,3,4。我们想要找到第4个最大值,即4个。但是当我们使用算法时,我们采用前4个元素,构建minheap,Sk为1。
我做错了什么?如果有人可以帮忙,我将不胜感激。感谢
答案 0 :(得分:4)
我认为你的术语混淆了。序列1,2,3,4中最大的元素是数字4.第二大元素是3,第三大元素是2,第四大元素是1.由于算法返回1,它可以正常工作
但是,4是序列中的第k个最小元素。如果要查找第k个最小元素,可以将最小堆与最大堆交换,并对算法进行适当的调整。
希望这有帮助!