劍指 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 次
解題思路:
由於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:
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]
劍指Offer 30 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...
劍指offer 30 包含min函式的棧
這道題的題目可以描述為 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式,在該棧中,呼叫min,push以及pop的時間複雜度都是o 1 typedef int datatype define maxsize 100 typedef structstack void stack...
劍指offer 30 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 常規思路的問題 如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是o 1 如果用乙個變數記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個...