[本文出自天外归云的博客园]
思路:入栈时靠辅助栈记住主栈元素中最小的,出栈时一直pop主栈元素直到辅助栈栈顶元素出现。
代码如下(定义栈、超级栈):
class Stack(object): def __init__(self): self.items = [] def push(self, ele): self.items.append(ele) def peek(self): return self.items[-1] def pop(self): top = self.items.pop() return top class SuperStack(Stack): def __init__(self): self.stack = Stack() self.temp = Stack() # 入栈的时候把最小的元素放到辅助栈栈顶 def push(self, ele): if self.temp.items == []: self.temp.push(ele) elif ele < self.temp.peek(): self.temp.push(ele) self.stack.push(ele) # 出栈的时候一直pop直到等于辅助栈栈顶元素的元素出现 def pop(self): min = self.temp.peek() while True: if self.stack.peek() != min: print(f'POP:{self.stack.pop()}') else: print(f'MIN:{self.stack.peek()}') break if __name__ == '__main__': ss = SuperStack() ss.push(22) ss.push(3) ss.push(33) ss.push(4) ss.push(55) ss.push(12) ss.push(13) ss.push(16) ss.pop()
运行结果: