一、 實現乙個棧,要求實現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 ...