包含min函数的栈

题目

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数

思路

不可以用个中间变量来存放最小值,这种在对于如栈时最小值的更新是可以起到作用的,但是出栈是若果包含该最小值的变量弹出了,最小值就无法实现更新了,所以用一个辅助栈来实现最小值的更新

辅助栈(m_min)工作原理:

  入栈

  1. 数据进去数据栈(m_data)
  2. 当辅助栈为空时或要入栈的元素小于辅助栈的栈顶元素,进入辅助栈
  3. 当它不为空时,把辅助栈的栈顶元素在进行一次入栈操作

  出栈

  1. 数据栈和辅助栈同时弹出栈顶元素

min函数只需返回辅助栈的栈顶元素

class Solution {
public:
    void push(int value) {
        data.push(value);
        if(help.empty()||help.top()>=value)
            help.push(value);
        else
            help.push(help.top());
        return ;
    }
    void pop() {
       // assert(data.size()>0&&help.size()>0)
        data.pop();
        help.pop();
    }
    int top() {
        int val=data.top();
        data.pop();
        help.pop();
        return val;
    }
    int min() {
        return help.top();
    }
private:
    stack<int> data;
    stack<int> help;
};
原文地址:https://www.cnblogs.com/tianzeng/p/10182455.html