C語言——使用迴圈和遞迴計算階乘
阿新 • • 發佈:2022-01-29
劍指 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個元素中的最小值。
案例:
題解原始碼:
作者:紅雨 出處:https://www.cnblogs.com/52why 微信公眾號: 紅雨pythonclass 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]