leetcode題 155 最小棧(簡單)

2021-09-26 14:56:38 字數 1388 閱讀 1132

一、題目描述:155. 最小棧(簡單)

設計乙個支援 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.

二、解題思路

方法一、

建立兩個棧,乙個stack裝當前push的值,乙個stack_min棧頂裝當前最小值。push值x的時候,stack直接入棧x,如果stack_min的棧頂元素大於x,stack_min則入棧x,否則入棧stack_min的棧頂元素。取值的時候直接取棧頂元素,pop的時候兩個棧同時pop。

方法二建立兩個棧,乙個stack裝當前push的值,乙個stack_min棧頂裝當前最小值。和方法1不一樣的地方是入棧的時候遇到x比stack_min棧頂元素小或者等於的時候才入棧x(這裡等於的時候也一定要入棧,因為出棧的時候根據stack,stack_min棧頂元素相等才出棧,如果這邊相等沒入棧的話,有多個min值的時候會導致出棧的後不同步。出棧的時候當stack 的棧頂元素和stack_min的棧頂元素相等的時候才出棧。

三、**

class minstack 

vectorstack;

vectorstack_min;

void push(int x)

stack.push_back(x);

stack_min.push_back(*stack_min.rbegin());

}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();

*/

LeetCode第155題 最小棧

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.push 2 m...

leetcode 棧 155 最小棧

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.push 2 m...

LeetCode刷題筆記 155 最小棧

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。略看sdc1的時候感覺getmin 有問題,但其實push 和pop 寫的很巧妙 比如依次錄入5,4,...