带最小值操作的栈

来源:互联网 发布:网狐荣耀棋牌源码 编辑:程序博客网 时间:2024/05/27 09:44

问题描述:

实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持pushpop 和 min 操作,所有操作要求都在O(1)时间内完成。

如果堆栈中没有数字则不能进行min方法的调用。

思路方法:

1、定义一个栈这里我们称为最小栈,原来的栈我们称为数据栈。

2、最小栈和数据栈元素个数一定相同。最小栈的栈顶元素为数据栈的所有元素的最小值。

3、数据栈入栈一个元素A,最小栈需要拿这个元素与最小栈栈顶元素B比较,如果A小于B,则最小栈入栈A。否则最小栈入栈B。

4、当数据栈出栈一个元素时,最小栈也同时出栈一个元素。

5、对于站内没有元素的话,则需要抛出异常。


代码如下:

class MinStack {public:    stack<int> s_num;    stack<int> s_min;    MinStack() {        // do initialization if necessary    }    void push(int number) {        // write your code here        s_num.push(number);        if(s_min.empty()){            s_min.push(number);        }        else{            int min = s_min.top();            if(min<number){                s_min.push(min);            }            else{                s_min.push(number);            }        }    }    int pop() {        // write your code here        if(s_num.empty()){            throw "stack is empty";        }        else{            int res = s_num.top();            s_num.pop();            s_min.pop();            return res;        }    }    int min() {        // write your code here        if(s_min.empty()){            throw "stack is empty";        }        else{            int res = s_min.top();            return res;        }    }};