swift演算法 最小棧

2021-09-25 07:22:56 字數 1185 閱讀 9157

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...