美文网首页
02_最小栈

02_最小栈

作者: butters001 | 来源:发表于2019-11-09 13:02 被阅读0次
class MinStack(object):

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.nums = []

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.nums.append(x)

    def pop(self):
        """
        :rtype: None
        """
        self.nums.pop()

    def top(self):
        """
        :rtype: int
        """
        if self.nums:
            return self.nums[-1]
        return 0

    def getMin(self):
        """
        :rtype: int
        """
        return min(self.nums)


# 上述方法的pop(0)方法,每次都要移动数组,而且min方法的耗时不是常数 用空间换时间
class MinStack2(object):

    # 辅助栈和数据栈不同步
    # 关键 1:辅助栈的元素空的时候,必须放入新进来的数
    # 关键 2:新来的数小于或者等于辅助栈栈顶元素的时候,才放入(特别注意这里等于要考虑进去)
    # 关键 3:出栈的时候,辅助栈的栈顶元素等于数据栈的栈顶元素,才出栈,即"出栈保持同步"就可以了

    def __init__(self):
        # 数据栈
        self.data = []
        # 辅助栈
        self.helper = []

    def push(self, x):
        self.data.append(x)
        # 关键 1 和关键 2
        if len(self.helper) == 0 or x <= self.helper[-1]:
            self.helper.append(x)

    def pop(self):
        # 关键 3:【注意】不论怎么样,数据栈都要 pop 出元素
        top = self.data.pop()

        if self.helper and top == self.helper[-1]:
            self.helper.pop()
        return top

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

    def getMin(self):
        if self.helper:
            return self.helper[-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()


# 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()

相关文章

  • 02_最小栈

  • LeetCode-155-最小栈

    LeetCode-155-最小栈 155. 最小栈[https://leetcode-cn.com/problem...

  • 最小栈

    设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 ...

  • 最小栈

    设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 ...

  • 最小栈

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 最小栈

    题目描述 https://leetcode-cn.com/problems/min-stack/ 解 思路 用一个...

  • 最小栈

    题目 难度级别:简单 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 pu...

  • 最小栈

    题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) --...

  • 最小栈

    题目:MinStack minStack = new MinStack();minStack.push(-2);m...

  • 最小栈

    题目信息 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) ...

网友评论

      本文标题:02_最小栈

      本文链接:https://www.haomeiwen.com/subject/latnbctx.html