劍指offer30-包含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.
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路是創建一個輔助棧來保存當前棧的最小值:

class MinStack:

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


    def push(self, x: int) -> None:
        if len(self.state)==0:
            self.state.append(x)
        else:
            self.state.append(min(x,self.state[len(self.state)-1]))
        
        self.stack.append(x)

    def pop(self) -> None:
        self.state.pop()
        self.stack.pop()


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


    def min(self) -> int:
        return self.state[len(self.state)-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()

上面的代碼對棧中每個位置的元素都保存一個當該元素爲棧頂時的最小元素,更簡潔的方法是隻有當入棧元素小於或等於當前棧中最小元素時纔再輔助棧中壓入新的最小元素,出棧時則要判斷出棧元素是否爲最小元素

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