演算法題23 帶min函式的棧

2021-07-10 11:59:49 字數 836 閱讀 5802

題目

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式。在該棧中,呼叫 min、push 及 pop 的時間複雜度都是 0(1)

分析

要在o(1)的時間獲取最小元素,需要將這個最小元素儲存下來。但只用乙個變數去儲存最小的元素可以嗎?如果在使用棧的過程中將這個最小元素pop出去了,因為棧中的元素是無序的,則無法在o(1)的時間找到第二小的值做為最小元素。

因此我們要麼要將棧中的元素在push的過程中排序,要麼需記錄棧的每乙個位置所對應的的最小值,具體做法是借助乙個輔助棧,在輔助棧的同一位置上push進乙個原棧從棧底至該位置的最小值。輔助棧的棧頂元素永遠是最小的,每次push新元素後,

如果新元素比輔助棧頂元素小,將該元素也push進輔助棧,反之,仍push原最小元素。過程中保持輔助棧和原棧大小一致。

**

1 template 2

void reversestack(stack&st);

34 template class

minstack

5;

1 template void minstack::minpush(const t&value)

2else813

}1415 template void minstack::minpop()

1622}23

24 template t& minstack::mintop()

2528

29 template t& minstack::getmin()

30

LintCode M 帶min函式的棧

帶最小值操作的棧 描述 筆記 資料 評測 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。注意事項 如果堆疊中沒有數字則不能進行min方法的呼叫 您在真實的面試中是否遇到過這個題?樣例 如下...

棧 佇列 30題 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式在該棧中,呼叫min push及pop的時間複雜度都是o 1 示例 minstack minstack new minstack minstack.push 2 minstack.push 0 minstack.push 3 mi...

演算法題目 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min,push及pop的時間複雜度都是o 1 解題關鍵是,新增乙個輔助棧 include include include include using namespace std templateclass stac...