【发布时间】:2013-09-28 08:36:34
【问题描述】:
我试图在空间和时间复杂度方面以最有效的方式找到数组中的第二个最大值,但我有两个主要问题:
1. 时间复杂度:
天真的或蛮力方法需要两次才能找到最小的元素,因此复杂度为 O(n),如果我对数组进行排序,则需要 O(n2)。
2. 空间复杂度:
我总是可以使用 BST 进行 O(log(n)) 排序,但它们需要额外的空间来维护树,我还可以创建一个堆并执行两次删除,我会得到第二大元素,但这里也是堆被创建并存储在内存中。
我有什么选择?
【问题讨论】:
-
我认为如果你存储遇到的最小和第二小的元素,蛮力尝试将只需要一次通过 - 我想在技术上仍然是 O(n)