题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:栈的弹出,压入,以及取上值这些都是基础知识,但是这里要求min值,第一反应是定义一个变量,每次压入点的时候和这个变量比较,要是比该变量小,则交换。但是考虑到栈有弹出操作,如果弹出的那个数把最小值弹出去了,那么剩下的栈当中的zu最小值就不得而知。
所以,最好的办法是建立一个辅助栈,来压入每次压入原栈的最小值
代码:
class Solution {
public:
stack<int> pre;
stack<int> minshu;
void push(int value) {
pre.push(value);
if(minshu.empty())
{
minshu.push(value);
}
else{
if(value<minshu.top())
{
minshu.push(value);
}
else{
minshu.push(minshu.top());//加上这句,是为了让minshu这个堆栈的大小始终保持和pre一样大,且
//minshu栈的最上方一直保持为当前pre当中的最小值
}
}
}
void pop() {
pre.pop();
minshu.pop();
return;
}
int top() {
return pre.top();
}
int min() {
return minshu.top();
}
};