一、題目描述: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,...