【每日力扣】155 最小栈

题目:

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

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

思路:

用辅助栈min_stk存储插入当前数时栈stk中的最小值,如果当前stk中的最小值被pop,则min_stk中的该值也一起pop。

另外需要注意的是,这里将数压入辅助栈时,与当前最小值相等的数也要压入。

题解:

class MinStack:

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


    def push(self, x: int) -> None:
        self.stk.append(x)
        if not self.min_stk:
            self.min_stk.append(x)
        else:
            if x <= self.min_stk[-1]: self.min_stk.append(x)


    def pop(self) -> None:
        if self.stk.pop() == self.min_stk[-1]:
            self.min_stk.pop()


    def top(self) -> int:
        if self.stk: return self.stk[-1]


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

你可能感兴趣的:(Leet,Code,leetcode,数据结构,算法,python)