最小棧的實現

2021-10-09 05:04:39 字數 931 閱讀 9864

題目:實現乙個棧,該棧帶有出棧(pop)、入棧(push)、取最小元素(getmin)3個方法,要保證這3個方法的時間複雜度都是o(1)

解題思路:

設原有的棧叫做棧a,此時建立乙個額外的「備胎」棧b,用於輔助棧a;

當第乙個元素進入棧a,讓新元素也進入棧b。這個唯一的元素就是棧a的當前最小值。

之後每當新元素進入棧a時,比較新元素和棧a當前最小值的大小,如果小於棧a當前最小值,則讓新元素進入棧b,此時棧b的棧頂元素就是棧a當前最小值;

每當棧a有元素出棧時,如果出棧元素是棧a當前最小值,則讓棧b的棧頂元素也出棧。此時棧b餘下的棧頂元素所指向的是棧a當中原本第2小的元素,代替剛才出棧的元素成為最小值。

**實現:

private stack

mainstack=

newstack

<

>()

;//主棧

private stack

minstack=

newstack

<

>()

;//輔助棧

/** * 入棧操作

* @param element 入棧的元素

*/public

void

push

(int element)

}//出棧操作

public integer pop()

return mainstack.

pop();

}//獲取棧中的最小元素

public

intgetmin()

throws exception

return minstack.

peek()

;}

最小棧的實現

最小棧的實現 定義兩個棧,乙個資料棧,乙個最小棧 如果最小棧為空就直接把number壓人棧中 最小棧不為空,就把number與最小棧的棧頂元素進行比較,如果小於最小棧的棧頂元素,就把number壓入最小棧,否則就把number壓入datastack中,最後返回最小棧的棧頂元素就是最小值 includ...

最小棧的實現

coding utf 8 實現乙個棧,該棧帶有出棧 pop 入棧 push 取最小元素 getmin 3個方法。要保證這3個方法的時間複雜度都是o 1 class minstack 定義列表 def init self self.stack 入棧def push self,value 出棧 defp...

最小棧 最小棧的實現與優化

實現乙個最小棧,一步一步優化,從額外空間o n 到o 1 push,pop,top,getmin都是o 1 時間。空間消耗o n 如何優化到o 1 class minstack1 void pop int top int getmin 如何只用乙個棧實現最小棧的實現?入棧順序 2,1,3,4,2,0...