关于我:
睡觉待开机:个人主页
PDF版免费提供:倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。
留下你的建议:倘若你发现本文中的内容和配图有任何错误或改进建议,请直接评论或者私信。
倡导提问与交流:关于本文任何不明之处,请及时评论和私信,看到即回复。
1.前言
最小栈,是栈相关练习题中的典型题目,这里来介绍一种简单解答方式。
2.题目简介
题目链接:LINK
题意比较简单,就是实现一种最小栈,这种栈可以实现O(1)时间复杂度内找到当前栈中最小的元素值是多少。
3.题解思路
我们在最小栈这个需要我们写的数据结构中内置两个栈。
第一个栈用于正常存储数据,用于支持正常的栈的push\pop\top等功能。
第二个栈我们用于记录最小值入栈的变化,如果入栈的值比当前最小值小/相等,那么最小栈也入一份同样的val值。
4.示例代码
class MinStack {
private:
stack<int> _st; //正常的栈
stack<int> _minst; //记录最小的值变化
public:
MinStack() {
//构造函数不用写,因为我们两个成员变量都是自定义类型,对于默认构造函数来说自定义类型会自动调用其构造函数。
}
void push(int val) {
_st.push(val);
if(_minst.empty() || _minst.top() >= val)
{
_minst.push(val);
}
}
void pop() {
int pop = _st.top();
_st.pop();
if(pop == _minst.top())
{
_minst.pop();
}
}
int top() {
return _st.top();
}
int getMin() {
return _minst.top();
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5c51e26b4015421da00a0c6b02565b11.png#pic_center)