【剑指Offer】面试题21:包含min函数的栈

来源:互联网 发布:济南seo外包公司 编辑:程序博客网 时间:2024/04/30 01:55

思路整理自剑指Offer


一:题目描述


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


二:解题思路


刚看时读题,并没有很清楚的理解题目的意思,看了解析后才明白,题目的意思可简单理解为:

一批数据入栈后,你可以获得这批数据的最小值,可以更改push(),pop(),top()函数和新建的min()函数实现


可以借助辅助栈,利用空间换时间,实现时间复杂度为O(1)的方法

以例子说明,加入将3,4,2,1压栈,求栈中元素最小值

定义一个辅助栈,与原始栈同时出栈入栈,区别在于辅助栈每次都把最小值压入栈,那么就可以保证,辅助栈栈顶一直都是最小元素。

三:代码实现

class Solution {public:    //需要自己定义栈,以及辅助栈    stack<int> data;  //存放数据    stack<int> min_data;  //存放data中的最小值,min_data大小等于data大小        void push(int value) {        //新元素入栈        data.push(value);        //如果min_data为空,新元素入栈        if(min_data.size()==0)            min_data.push(value);        //如果min_data不为空否则,        else{            //value小于min_data栈顶元素,入栈,            if(value<=min_data.top())                min_data.push(value);            else{                //value小于min_data栈顶元素,说明当前min_data的栈顶元素是data中的最小值,再将min_data栈顶元素入栈                 int topValue=min_data.top();             min_data.push(topValue);                                 }                       }    }    //弹栈,获得栈顶元素,获得栈的最小值,都是对原始栈而言的    void pop() {        data.pop();        min_data.pop();    }    int top() {        return data.top();    }    int min() {        return min_data.top();    }};


原创粉丝点击