题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
分析题目:要求实现一个O(1)时间复杂度的返回最小值的栈。正常情况下,栈的push,pop操作都为O(1),但是返回最小值,需要遍历整个栈,时间复杂度为O(n),所以这里需要空间换时间的思想。
方法:使用辅助栈
首先需要一个正常栈m_data,用于栈的正常操作,然后需要一个辅助栈m_min,专门用于获取最小值。
```cpp
class Solution {
public:
//使用两个栈来完成
stack<int> m_data;//数据栈,存放所有数据
stack<int> m_min;//辅助栈,保存最小值
void push(int value) {
m_data.push(value);//数据入栈
if(m_min.size()==0||value<m_min.top()){//当min栈为空或者当前值小于min栈栈顶元素
m_min.push(value);//则将当前元素入min栈
}
else{
m_min.push(m_min.top());//否则就将min栈栈顶元素入min栈
}
}
void pop() {
//这里题目说明了不会出现空操作,所以不用判断,否则需要进行非空判断
m_data.pop();//数据栈和辅助栈同时出栈
m_min.pop();
}
int top() {
return m_data.top();
}
int min() {
return m_min.top();
}
};