标题包含min函数的栈
题目:
请你写一个具有getMin()函数,可以获取栈的最小值的函数。
要求:算法复杂度为O(1)级别
思路:
可以用另一个栈来存储各个状态的最小值
题解:
// 3.包含min函数的栈.cpp
#include <iostream>
#include<stack>
using namespace std;
class MyStack
{
public:
//出栈
void push(int x) {
_data.push(x);
//为空直接入入栈
if (_min.empty())
_min.push(x);
//比较最小的入栈
else
_min.push(x < _min.top() ? x : _min.top());
}
//入栈
void pop() {
_data.pop();
_min.pop();
}
//获取栈顶元素
int top() {
return _data.top();
}
//得到栈中最小元素
int getMin() {
return _min.top();
}
private:
stack<int> _data;//数据栈
stack<int> _min;//最小值栈
};
int main()
{
//定义一个自定义栈
MyStack mystack;
//我们来测试一下
mystack.push(1);
mystack.push(-2);
mystack.push(3);
cout << mystack.getMin() << endl;
mystack.pop();
mystack.push(-5);
//结果应该是-5的
cout << mystack.getMin() << endl;
}
运行结果: