題目:實現乙個棧,該棧帶有出棧(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...