面試題30. 包含min函數的棧

定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間複雜度都是 O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.

思路

使用一個輔助棧,長度與原棧相同,每個位置代表原棧cut到這個長度時的最小值。

每次push時候同樣需要更新輔助棧:新元素更小則append新元素,否則append輔助棧最後一個元素(意味着新加入一個元素後再cut到這一位,最小值還是之前那個)。pop時候同時pop兩個棧,這樣的結構就可以保證隨時查詢到最小值。

class MinStack:

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


    def push(self, x: int) -> None:
        self.stack.append(x)
        if self.mini != []:
            if x < self.mini[-1]:
                self.mini.append(x)
            else:
                self.mini.append(self.mini[-1])
        else:
            self.mini.append(x)


    def pop(self) -> None:
        self.mini.pop()
        return self.stack.pop()


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


    def min(self) -> int:
        return self.mini[-1]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章