面試經典 最小棧的實現(小三轉正)

2021-09-23 14:09:07 字數 678 閱讀 2672

這道題目主要考察你對棧的出入情況是否真正理解。

解題思路:

建立乙個輔助棧,我們這裡定義為棧b,同時定義乙個主棧,棧a

當第乙個元素進入棧a時,讓新元素也進入棧b,因為此時的最小元素就是第乙個元素 棧a4

棧b4

之後,每當a中新進入乙個元素就跟棧a中的最小值進行比較,如果比最小值小則進入棧b.此時棧b的棧頂元素就是棧a的最小值 棧a

4973

棧b 4

34.每當棧a有元素進行出棧時,如果出棧元素是棧a的最小值,則讓棧b的棧頂元素也進行出棧,則棧b的餘下棧頂就是a的次小值,代替剛才出棧的最小值變成現在的最小值(小三轉正)。

5.調取getmin時就是調取b的棧頂元素

**展示

//最小棧問題

//題目描述:實現乙個棧,該棧的出棧和入棧,取最小值的三個方法的時間複雜度都是

//o(1)

#include#includeusing namespace std;

stacka;//棧a是主棧

stackb;//棧b是輔助棧

void push(int element)

}void pop()

a.pop();

}void getmin(){

if(a.empty()){

cout<<"stack is empty"《輸出

最小棧的實現

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

最小棧的實現

題目 實現乙個棧,該棧帶有出棧 pop 入棧 push 取最小元素 getmin 3個方法,要保證這3個方法的時間複雜度都是o 1 解題思路 設原有的棧叫做棧a,此時建立乙個額外的 備胎 棧b,用於輔助棧a 當第乙個元素進入棧a,讓新元素也進入棧b。這個唯一的元素就是棧a的當前最小值。之後每當新元素...

最小棧的實現

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