可能重复:
Find the 2nd largest element in an array with minimum # of comparisom
我是否知道如何在O(n + logn)时间内搜索最大和最大的数字? 提前谢谢。
祝你好运, Pidig
答案 0 :(得分:7)
请注意O(n+logn) = O(n)
,并在列表上迭代两次{。{1}}。
因为它在数组上迭代常数,算法为O(n)
。
对于通用O(n)
最大元素:您可以使用k
中的分钟heap或O(nlogk)
中的selection algorithm来执行此操作 - 如{ {3}},但对于两个最大的元素 - 这些方法都是过度的。
答案 1 :(得分:3)
我猜你的意思是n + log(n) - 2次比较。
这是你如何做到的。
比较两组中的元素。即,每组制作n / 2组两个元素。
以这种方式继续使用n / 4,n / 8,n / 16等等,直到获得第一个(最大)元素。
现在,下一个最大元素必须是此方法中第一个元素的输家。因此log(n)对此进行了更多的比较。
准确地说,这将需要n + log(n) - 2次比较。
答案 2 :(得分:1)
您实际上可以在O(n)
时间内执行此操作:Selection Algorithm