剑指Offer编程题-包含min函数的栈

题目:包含min函数的栈

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

解题思路

使用两个列表,一个保存数据,一个保存最小值,如:

li: [ 5, 7, 4, 6, 3, 8, 9, 2, 10 ]

mi: [ 5, 4, 3, 2 ]

在栈push的时候,数据列表直接添加新值,如果新值小于mi列表中最后一项,则也添加到mi列表中。在栈pop的时候,数据列表直接pop,如果pop出的值等于mi列表中最后一项,那么mi列表也pop出最后一项。栈的min函数直接取mi列表的最后一项。

实现

python

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.li = []
        self.mi = []

    def push(self, node):
        # write code here
        self.li.append(node)
        if not self.mi or self.mi[len(self.mi)-1] > node:
            self.mi.append(node)

    def pop(self):
        # write code here
        v = self.li.pop()
        if v == self.mi[len(self.mi)-1]:
            self.mi.pop()
        return v

    def top(self):
        # write code here
        if len(self.li) > 0:
            return self.li[len(self.li)-1]
        return None

    def min(self):
        # write code here
        return self.mi[len(self.mi)-1] if len(self.mi) > 0 else None