剑指Offer 20. 包含min函数的栈 (栈)

Posted huangqiancun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer 20. 包含min函数的栈 (栈)相关的知识,希望对你有一定的参考价值。

题目描述

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

题目地址

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

使用两个栈,一个为数据栈,一个为辅助栈。数据栈用于存储所有数据,辅助栈用于存储最小值。

举个例子:

入栈时:首先往空的数字栈里压入数字3,显然现在3是最小值,我们也把最小值压入辅助栈。接下来压入数字4,由于4大于之前的最小值,因此我们只要入数据栈,不压入辅助栈。

出栈时:当数据栈和辅助栈相同,辅助栈和数据栈的栈顶元素都要出栈,否则,仅数据栈的栈顶元素出栈。

获取栈顶元素时:直接返回数据栈的栈顶元素

栈最小元素:直接返回辅助栈的栈顶元素

Python

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.dataStack = []
        self.minStack = []
    def push(self, node):
        # write code here
        self.dataStack.append(node)
        if len(self.minStack) <= 0 or node < self.minStack[-1]:
                self.minStack.append(node)

    def pop(self):
        # write code here
        val = self.dataStack.pop()
        if val == self.minStack[-1]:
            self.minStack.pop()
        return val

    def top(self):
        # write code here
        return self.dataStack[-1]

    def min(self):
        # write code here
        return self.minStack[-1]

if __name__ == __main__:
    result = Solution()
    result.push(2)
    result.push(4)
    result.push(1)
    result.push(3)
    result.pop()
    result.top()
    result.min()

以上是关于剑指Offer 20. 包含min函数的栈 (栈)的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer 20. 包含min函数的栈 (栈)

剑指offer(20)包含min函数的栈

剑指offer-包含min函数的栈20

剑指offer系列——20.包含min函数的栈

包含min函数的栈-剑指Offer

剑指offer:包含min函数的栈