题目
链接:leetcode链接
思路
这道题目做起来还是比较简单的,使用两个栈就可以实现题目要求。
其中一个栈s实现栈的基本功能,另一个栈mins实现检索最小元素的功能。
来看一下怎么样实现检索最小元素的功能呢?
我们可以这么做:
在每一次入栈的时候,都将该元素x与mins栈的栈顶元素top相比较
1、x <= top
x入mins栈,此时x也就成了最小的元素
注意这里要加上等号,因为,可能会有多个最小的元素,比如出现多个0等
2、x > top
x不入mins栈
出栈的时候怎么实现呢?
将s.top 与mins.top进行比较
1、s.top == mins.top
也就是最小元素,此时两个栈同时pop
2、s.top > mins.top
仅s栈pop即可
mins.top一定是最小元素,所以s.top 不可能 < mins.top
其余功能很容易实现,就不进行讲解了
代码
C++
class MinStack {
public:
stack<int> s1;
stack<int> mins;
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
s1.push(x);
if(mins.empty() || x <= mins.top())
{
mins.push(x);
}
}
void pop() {
if(s1.top() <= mins.top()) mins.pop();
s1.pop();
}
int top() {
return s1.top();
}
int getMin() {
return mins.top();
}
};