155.MinStack (LeetCode)

問題描述:Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • pop() -- Removes the element on top of the stack.
  • getMin() -- Retrieve the minimum element in the stack.

Example:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.

Chanllenge:

  • 一個(gè)變量min無法完成記錄棧中所有狀態(tài)(所有方法)下的最小值
  • so 使用另外一個(gè)stack記錄各個(gè)狀態(tài)的最小值
  • 算法復(fù)雜的常數(shù)級(jí)別 O(1) time complexity. 所以需要空間換取時(shí)間
操作過程

代碼

class MinStack(object):

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

    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        self.data.append(x)       #不管怎樣data都要入棧,但是min需要不要入棧需要判斷
        if len(self.getmin) == 0:    #如果是第一個(gè)數(shù)字,目前肯定是最小數(shù)字所以入棧
            self.getmin.append(x)
        else:                     #如果不是第一個(gè)數(shù)字,那么比較min棧中最小的元素(棧里最上面的元素)與data進(jìn)棧的元素的大小決定min是否要進(jìn)棧
            if self.getmin[-1] >= x: #需要注意這個(gè)等于好=號(hào)
                self.getmin.append(x)
        

    def pop(self):
        """
        :rtype: void
        """
        if self.data:             #data不為空直接出棧,但是需要判斷min棧與data出棧元素是否相等決定min棧要不要進(jìn)行出棧操作
            if self.data[-1] == self.getmin[-1]:
                self.getmin.pop()
            self.data.pop()
        

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

    def getMin(self):
        """
        :rtype: int
        """
        if self.getmin:
            return self.getmin[-1]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評(píng)論 0 38
  • Q: Design a stack that supports push, pop, top, and retri...
    wxqyppqm閱讀 504評(píng)論 0 0
  • 晚飯后陪一位朋友在珠江邊散步。這位朋友向我提出了這樣的問題:“人為什么活著?人活著又是為了什么?如果 人只是為了活...
    左手夢圓閱讀 659評(píng)論 5 7
  • 九寨溝 王漢文 不知多少年的期待與向往 都因各種原因而沒能如愿成行 丁酉初秋發(fā)生在九寨溝的一場地震 讓我永遠(yuǎn)斷了說...
    王漢文閱讀 764評(píng)論 5 3
  • 之前聽歌往往是搖滾,要大聲喊大聲叫才痛快。像汪峰那樣,在臺(tái)上歇斯底里,緊握住話筒跪倒地上。最好有架子鼓,咚咚咚,一...
    一號(hào)貓閱讀 556評(píng)論 0 2

友情鏈接更多精彩內(nèi)容