剑指offer—包含min函数的栈(Pyhton版)

题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

解题思路:

看到这个问题,,我们最开始可能会想,,添加一个成员变量用于保存最小元素,,每次压栈时如果压栈元素比当前最小元素更小,就更新最小元素。
但是这样会有一个问题,如果最小元素被弹出栈,就无法获得下一个最小元素。在最小元素弹出后还能得到次小元素,次小的元素弹出后,还要能得到次次小的元素,因此添加一个成员变量存放最小元素是不够的,需要用另一个栈来保存这些元素. 我们叫它最小元素栈。
每次压栈操作时,如果压栈元素比当前最小元素更小,就把这个元素压入最小元素栈,原本的最小元素就成了次小元素。同理,弹栈时,如果弹出的元素和最小元素栈的栈顶元素相等,就把最小元素的栈顶弹出。

代码实现:
# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack = []
        self.min_stack = []
    def push(self,node):
        self.stack.append(node)
        if not self.min_stack or self.min_stack[-1] >= node:
            self.min_stack.append(node)
    def pop(self):
        if self.stack[-1] == self.min_stack[-1]:
            self.min_stack.pop()
        self.stack.pop()

    def top(self):
        return self.stack[-1]

    def min(self):
        return self.min_stack[-1]

你可能感兴趣的:(剑指offer)