码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-13 22:54:37      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:views   val   pad   地址   www.   rac   main   大于   coder   

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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函数的栈 (栈)

标签:views   val   pad   地址   www.   rac   main   大于   coder   

原文地址:https://www.cnblogs.com/huangqiancun/p/9784325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!