20、包含min函数的栈

来源:互联网 发布:mac查看cad图纸的软件 编辑:程序博客网 时间:2024/05/18 14:12

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

时间限制:1秒 空间限制:32768K

Ⅰ我的方法(用vector实现栈)
思路:题目比较简单,用vector实现栈的功能,我用的方法在弹出时,用到了迭代器来删除vector里的最后一个元素,it = stack.end()-1 指向最后一个元素,然后erase.

代码:

class Solution {public:    void push(int value) {        stack.push_back(value);    }    void pop() {        if(stack.empty())            return;        vector<int>::iterator it = stack.end()-1;        stack.erase(it);    }    int top() {        if(stack.empty())            return 0;        return stack[stack.size()-1];    }    int min() {        if(stack.empty())            return 0;        int minnum = stack[0];        for(int i = 0;i < stack.size();i++){            if(stack[i] < minnum)                minnum = stack[i];        }        return minnum;    }private:    vector<int> stack;};

Ⅱ 用stack来实现(应用辅助栈存放最小值)
思路:minstack最上面的值永远是最小值
代码:

class Solution {public:    void push(int value) {        datastack.push(value);        if(minstack.empty())            minstack.push(value);        else{            int min = minstack.top();            if(value <= min)                minstack.push(value);        }    }    void pop() {        if(datastack.top()==minstack.top())            minstack.pop();        datastack.pop();    }    int top() {        return datastack.top();    }    int min() {        return minstack.top();    }private:    stack<int> datastack,minstack;};
原创粉丝点击