1. 程式人生 > 其它 >C語言——使用迴圈和遞迴計算階乘

C語言——使用迴圈和遞迴計算階乘

劍指 Offer 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.
提示:

各函式的呼叫總次數不超過 20000 次

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路:

由於python中沒有stack這種STL型別,使用list模擬stack。由於題目要求在O(1)的時間複雜度中實現新增、刪除和獲取最小值,所以需要新增一個最小值list來儲存stack中元素的最小值。list[n]儲存的是stack中前n+1個元素中的最小值。

案例:
題解原始碼:
class MinStack:

    def __init__(self):
        self.stack =[]
        self.min_list = []


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


    def pop(self) -> None:
        self.stack.pop(-1)
        self.min_list.pop(-1)


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


    def min(self) -> int:
        return self.min_list[-1]
作者:紅雨
出處:https://www.cnblogs.com/52why
微信公眾號: 紅雨python