1、描述
設計乙個支援push、pop、top操作,並且能在常數時間內檢索到最小元素的棧。
push(x) --- 將元素 x 推入棧中
pop() --- 刪除棧頂的元素
top() --- 獲取棧頂的元素
getmin() --- 檢索棧中的最小元素
例1:
var minstack = minstack.init();
minstack.push(-2);
minstack.push(0);
minstack.push(-3);
minstack.getmin(); --> 返回 -3.
minstack.pop();
minstack.top(); --> 返回 0.
minstack.getmin(); --> 返回 -2.
2、演算法:
1)借用乙個輔助棧min_stack,用於儲存stack中最小值:
(1)push:每當push新值進來時,如果「小於等於」min_stack棧頂值,則一起push到min_stack,即更新了最小值;
(2)pop:判斷pop出去的元素值是否是min_stack棧頂元素值(即最小值),如果是則將min_stack棧頂元素一起pop,這樣可以保證min_stack棧頂元素始終是stack中的最小值。
(3)getmin:返回min_stack棧頂即可。
2)min_stack的作用是對stack中的元素做標記,標記的原則是min_stack中元素一定是降序的(棧底最大棧頂最小)。換個角度理解,min_stack等價於遍歷stack所有元素,把公升序的數字都刪除掉,留下乙個從棧底到棧頂降序的棧。本題要求獲取最小值的複雜度是o(1),因此須構建輔助棧,在push與pop的過程中始終保持輔助棧為乙個降序棧。
3)時間空間複雜度都為o(n),獲取最小值複雜度為o(1)。
class minstack
public func push(_ x : int)
}public func pop()->int
return stack.poplast()!
}public func top()->int
public func getmin()->int
}
簡單演算法 39 最小棧
題目 設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。示例 minstack minstack new minstack minstack.push 2 minstack.push 0 minstack.push 3 minstack.getmin 返回 3.min...
棧 Swift陣列實現棧
用陣列實現棧 class stack 棧頂 陣列的最後一條陣列 var peek anyobject?初始化棧,也就是初始化陣列 init 入棧操作 向陣列中追加資料 func push object anyobject 出棧操作 從陣列中移除最後一條資料 func pop anyobject?el...
LeetCode演算法題 最小棧MinStack
設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.push 2 m...