1. 程式人生 > >155.最小棧-python.md

155.最小棧-python.md

題目

設計一個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。

push(x) – 將元素 x 推入棧中。 pop() – 刪除棧頂的元素。 top() – 獲取棧頂元素。 getMin() – 檢索棧中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.
解法:

      該題比較簡單,只需要在init內初始化一個列表和最小值,每次堆值和取值時判斷一下是否是最小值即可,如果取走的是最小值,則遍歷取出新的最小值。

示例
class MinStack:
    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack = []
        self.min = None

    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
self.stack.append(x) if self.min == None or self.min > x: self.min = x def pop(self): """ :rtype: void """ # 棧堆為空 if not self.stack: return None popitem = self.stack.pop() # 棧堆為空 if not self.
stack: self.min = None return popitem # 如果取出的值是最小值 if popitem == self.min: self.min = self.stack[0] # 遍歷找出新的最小值 for i in self.stack: if i < self.min: self.min = i return popitem
執行結果

執行結果