實現乙個返回最小值的棧

2021-07-30 14:49:37 字數 958 閱讀 3882

一、 實現乙個棧,要求實現push(出棧)、pop(入棧)、min(返回最小值的操作) 的時間複雜度為o(1)

(1)棧的基本操作入棧(push);出棧(pop);查詢棧頂(top);棧的元素個數(size);檢查棧是否為空(empty);我們知道入棧(push)和出棧(pop)時間複雜度本身就為o(1);所以只要讓min(返回最小值操作)的時間複雜度為o(1)即可;

(2)min(返回最小值操作)的時間複雜度為o(1);

我們可以建立乙個輔助棧s2,用來存放主棧s1中最小的元素;

★使用兩個棧,s1,s2,先將第乙個元素同時對s1,s2入棧,然後接著對s1入棧,將s1入棧的元素和s2.top比較,假如s2.top大於入棧元素,則把該元素對s2也入棧(☛s2.top和入棧元素相等時也要入棧s2);否則將下乙個元素對主棧s1入棧,依次進行;

★出棧時,把s1出棧的元素和棧頂(s2.top)比較,相等就是最小值;同時s1,s2出棧,否則s1單獨出棧。

二:圖說

三:**實現:

#include

#include

using

namespace

std;

template

class stackmin

~stackmin()

{}void push(t data)

}void pop()

s1.pop();

}void min()

;

測試**:

int main()

四:執行結果:

3 2 棧的最小值

ntm inim um int minimum intmin imum 其時間複雜度為o 1 o 1 o 1 該演算法的缺點是當棧中元素較多時浪費了較多空間。以下是實現 和測試 測試結果如圖1所示。實現 class nodewithmin nodewithmin operator nodewithm...

Lintcode 帶最小值的棧

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

帶最小值操作的棧

描述 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。樣例 push 1 pop return 1 push 2 push 3 min return 2 push 1 min return ...