1. 程式人生 > >[劍指Offer] 30_包含min函式的棧

[劍指Offer] 30_包含min函式的棧

題目

定義棧的資料結構,請在該型別中實現一個能夠得到棧最小元素的min函式。
在該棧中,呼叫min、push及pop的時間複雜度都是O(1)。


思路

  1. 首先觀察到min的時間複雜度是O(1),所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就是最小值不可能是個單值,必須有辦法回溯。因此,可以將最小值也做成一個棧,同步push和pop。如果push進的元素小於當前最小值,則push該元素值進min_stack,否則push當前最小值進min_stack。我採用的方法是直接將min與val繫結成一個tuple進棧,大同小異。
    1. 時間複雜度:O(1)
    2. 空間複雜度:O(n)

程式碼

思路1:時間複雜度:O(1),空間複雜度:O(n)

class MinStack(object):

    def __init__(self):
        """
        initialize your data structure here.        """

        self.data = []

    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        if
self.data: min = x if self.data[-1][1] >= x else self.data[-1][1] else: min = x self.data.append((x, min)) return def pop(self): """ :rtype: void """ self.data.pop() return def top(self): """ :rtype: int """
return self.data[-1][0] def getMin(self): """ :rtype: int """ return self.data[-1][1]

思考

同題

LeetCode 155. 最小棧