c++实现---包含min函数的栈

题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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();
    }
};

猜你喜欢

转载自blog.csdn.net/Fizz6018/article/details/106869278