栈最小栈(LeetCode155)
Posted AI 菌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈最小栈(LeetCode155)相关的知识,希望对你有一定的参考价值。
一、题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解析
对于栈结构来说,具有天然的先进后出的性质。即如果一个元素 a 在入栈时,栈里有其它的元素 b, c, d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b, c, d 就一定在栈中,因为在 a 被弹出之前,b, c, d 不会被弹出。
因此我们无法直接获取栈中的最小元素,要实现getMin(),就必须新建一个栈min_stack,将最小值存起来。这样我们就能直接通过top()来获取原栈的最小值。
对于其他的基本要求,比如push、pop、top都很简单,只需要在原栈上进行相应的操作即可。
三、实现
根据以上的分析,采用C++实现如下:
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
class MinStack {
stack<int> mystack;
stack<int> min_stack;
public:
/** initialize your data structure here. */
MinStack() {
min_stack.push(INT_MAX);
}
void push(int val) {
mystack.push(val);
min_stack.push(min(min_stack.top(), val));
}
void pop() {
mystack.pop();
min_stack.pop();
}
int top() {
return mystack.top();
}
int getMin() {
return min_stack.top();
}
};
以上是关于栈最小栈(LeetCode155)的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript 刷题] 栈 - 最小栈, leetcode 155