如何在恒定时间内找到存储在堆栈中的最大值

时间:2010-08-27 08:06:38

标签: stack complexity-theory

使用临时变量存储最大值不适用于弹出操作。

3 个答案:

答案 0 :(得分:1)

如果你不关心推动操作中的O(n):

我个人的做法是保留已排序项目的链接列表。 每当弹出一个项目时,将其与排序列表中的最高项目进行比较。如果相同,除了弹出项目外,还要从列表中删除最高项目。如果不是,只需弹出该项目。

这样,你应该总是在链表的最后一个元素上有最高的项目,弹出的时间是O(1)。

如果你还需要O(1)进行推动,那么我将不得不通过。

答案 1 :(得分:0)

你做不到。堆栈未排序,这意味着您必须检查所有N值以找到最高值。仅这意味着至少 O(N)而“常数时间”意味着O(1)

答案 2 :(得分:0)

您可以通过管理包含最大值的其他堆栈来执行此操作。 算法是这样的: 在推送时,将新元素与最大堆栈的顶部进行比较。如果不是更少,也把它推到那里。弹出后,将元素与最大堆栈的顶部进行比较。如果相等,也从那里弹出。 在任何给定时间,最大堆栈的顶部是最大元素。