前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Q155 Min Stack

Q155 Min Stack

作者头像
echobingo
发布2018-04-25 16:51:52
4580
发布2018-04-25 16:51:52
举报
文章被收录于专栏:Bingo的深度学习杂货店

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

代码语言:javascript
复制
push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
getMin() -- Retrieve the minimum element in the stack.
Example:
代码语言:javascript
复制
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.
解题思路:

此题为栈的基本操作,加了一个在 O(1) 的时间返回最小值的功能。

具体做法先在初始化的时候定义一个栈。在每次压栈(push)的过程中,先取出最小值(getMin)与当前压入栈的值比较,更新当前最小值。最后,把当前压入值和当前最小值都压入栈中,方便在得到最小值(getMin)的时候直接取出即可。

注意点:

pop() 之前要确保栈不能为空;top() 是取出栈顶值,而不是删除栈顶元素。

Python实现:
代码语言:javascript
复制
class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack = []  # 定义一个栈

    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        curMin = self.getMin()  # 取出最小值
        if curMin == None or x < curMin:
            curMin = x
        self.stack.append((x, curMin))   # 同时保存最小值
        
    def pop(self):
        """
        :rtype: void
        """
        if len(self.stack) != 0:  # 判断栈是否为空
            self.stack.pop()[0]

    def top(self):
        """
        :rtype: int
        """
        if len(self.stack) == 0:  # 判断栈是否为空
            return None
        return self.stack[-1][0]

    def getMin(self):
        """
        :rtype: int
        """
        if len(self.stack) == 0:
            return None
        return self.stack[-1][1]  # 返回最小值
        


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

obj = MinStack()
obj.push(-2)
obj.push(1)
obj.push(-3)
print(obj.getMin())  # -3
obj.pop()
print(obj.top())  # 1
print(obj.getMin())  # -2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.02.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Example:
  • 解题思路:
  • 注意点:
  • Python实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档