在堆栈中查找最大值和最小值



假设一个Stack中有50000多个整数项?如何有效地找出其中的最大值或最小值?堆栈可以增长或减少,即pop()和push(),但我们需要跟踪堆栈中的最大值和最小值?

正如Mischel所指出的,具有find-min/find-max的Stack比O(n)更有效率?,已经回答了这个问题。

然而,该响应表明,您需要在堆栈中的每个点存储每个最大值和最小值。一个更好的解决方案是为最大值和最小值设置一个单独的堆栈。对于最大堆栈,只有当新元素大于当前最大值时,你才会将新元素推到最大堆栈上,反之亦然。当你从主堆栈中弹出的元素等于最小值和最大值堆栈的元素,而不等于主堆栈中的下一个元素时,你会弹出它们。

注意,这需要O(n)额外的空间,同时提供O(1)运算。

我唯一的想法是继承Stack并保持在max和min内部。在弹出和推送时,对您的max和min进行更改。

最新更新