剑指offer编程题——栈
包含min函数的栈
思路:一个栈用来实现正常的栈操作,另一个栈保存当前栈的最小值
比如将5,7,6,3,9,1依次输入栈中
栈1: 5,7,6,3,9,1
栈2:5,3,1
栈2只用保存比当前栈顶元素小的元素,当执行出栈操作时,判断一下栈2的栈顶元素是否和栈1的出栈元素相同,若元素相同,则将栈2的栈顶元素出栈。
class Solution {
private:
stack<int> sk1;
stack<int> sk2;
//用两个栈实现,一个栈实现正常的栈功能,另一个栈保存栈的当前最小值
public:
void push(int value) {
sk1.push(value);
if(sk2.empty())
{ sk2.push(value);
}
else
{
if(value<sk2.top())
{
sk2.push(value);
}
}
}
void pop() {
if(!sk1.empty()&&!sk2.empty())
{
int top_val = sk1.top();
sk1.pop();
if(sk2.top()==top_val)
{
sk2.pop();
}
}
}
int top() {
return sk1.top();
}
int min()
{
return sk2.top();
}
};