题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
对于栈和队列的问题,一般可以考虑使用两个栈和队列来解决问题,一个用来辅助解决问题。
在本题中,使用两个栈s1和s2,s2作为辅助栈,压栈时进行比较,如果A栈的压入比B栈的大,则B不压入;如果小于等于,则AB同时入栈;出栈时,如果AB栈顶元素相同,则B出栈;不相同的话,A出栈
class Solution {
public:
stack<int> stack1,stack2;
void push(int value) {
stack1.push(value);
if(stack2.empty())
stack2.push(value);
else if(value<=stack2.top())
{
stack2.push(value);
}
}
void pop() {
if(stack1.top()==stack2.top())
stack2.pop();
else
stack1.pop();
}
int top() {
//if(!stack1.empty())
return stack1.top();
}
int min() {
return stack2.top();
}
};