剑指Offer——(20)包含min函数的栈

题目描述:

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

实现如下:

//利用一个辅助栈,用来存放和数据栈相对应的每层之下的最小值
//利用minValue存储当前最小值,O(1)
class Solution 
{
public:
    int minValue = 0;
    stack<int> assistStack;
    stack<int> dataStack;
    void push(int value) 
    {
        dataStack.push(value);
        if (dataStack.size() == 1)//此时value为第一个元素,直接将value push进辅助栈,及当前最小值
        {
            assistStack.push(value);
            minValue = value;
        }
        else//否则用minValue与value比较,小的push进辅助栈,且更新minValue
        {
            if (value < minValue)
                minValue = value;
            assistStack.push(minValue);
        }
    }
    void pop() 
    {
        if (!dataStack.empty())//非空时操作
        {
            dataStack.pop();
            assistStack.pop();//更新辅助栈,保证每层之下的最小值不变
            minValue = assistStack.top();//将minValue更新为这层之下的最小值
        }
    }
    int top() 
    {
        if(!dataStack.empty())//非空时进行
            return dataStack.top();
        else return -1;
    }
    int min() 
    {
        return minValue;//直接返回minValue
    }
};

你可能感兴趣的:(算法,栈,剑指offer)