最小栈的实现
如何实现一个最小栈,使得需要输出最小值时,我能直接获取。
难点:由于栈是不提供迭代器,所以无法遍历栈中的数据从而得出最小值。
思路:其实可以创建一个另外的栈,称为最小栈,记录原本数据中最小值的状态,有以下两种情况当进入的数据不小于最小值时,最小栈中还是再存放入最小值,当进入的数据小于最小值时,最小栈存放入该数据,并且将其赋值给min。当pop数据时,同时也pop最小栈的数据,当获取最小值时,直接输出最小栈的栈顶top()来直接获取。
过程图示:
代码如下:
#include <stdio.h>
#include <stack>
class MinStack {
public:
MinStack() {
}
void push(int x) {
_data.push(x);
if (_min.empty()){
_min.push(x);
}
else{
if (x > _min.top()){
x = _min.top();
}
_min.push(x);
}
}
void pop() {
_data.pop();
_min.pop();
}
int top() {
return _data.top();
}
int getMin() {
return _min.top();
}
private:
std::stack<int> _data;
std::stack<int> _min;
};
致谢
本章知识点和思路由小象学院相关视频提供,由本人学习并梳理得出,希望自己加深记忆的同时,也能给大家提供更多有关于算法的知识点,谢谢支持!