最小棧的幾種實現

2021-10-03 09:13:47 字數 1449 閱讀 7730

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。

push(x) -- 將元素 x 推入棧中。

pop() -- 刪除棧頂的元素。

top() -- 獲取棧頂元素。

getmin() -- 檢索棧中的最小元素。

示例:minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

minstack.getmin(); --> 返回 -3.

minstack.pop();

minstack.top(); --> 返回 0.

minstack.getmin(); --> 返回 -2.

方法1:基本方法,原始棧+輔助棧,直接上**,沒做異常處理。

class minstack 

void push(int x)

else

}void pop()

int top()

int getmin()

};/**

* your minstack object will be instantiated and called as such:

* minstack* obj = new minstack();

* obj->push(x);

* obj->pop();

* int param_3 = obj->top();

* int param_4 = obj->getmin();

*/

時間複雜度o(1),空間複雜度o(n);

如果難度再提公升點,給個限制條件,資料範圍[-100000,100000],能否空間複雜度降為o(1)?

也就是下面的方法。棧中保留    插入值與最小值的差值。

方法2:原始棧+  min

class minstack 

void push(int x) else

}void pop()

int top()

return stack.top()+min;

}int getmin()

};/**

* your minstack object will be instantiated and called as such:

* minstack* obj = new minstack();

* obj->push(x);

* obj->pop();

* int param_3 = obj->top();

* int param_4 = obj->getmin();

*/

最小棧的實現

最小棧的實現 定義兩個棧,乙個資料棧,乙個最小棧 如果最小棧為空就直接把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...