两个stack实现,一个存数据,一个存最小值

设计getMin功能的栈

http://www.nowcoder.com/questionTerminal/c623426af02d4c189f92f2a99647bd34

class Solution {
public:
    /**
      [[1,3],[1,2],[1,1],[3],[2],[3]]
     * 数组第一个代表操作,1==push,2==pop,2==getMin
     * 所以 1出现时,后面需要接push的数字
     * 把所有的操作实现完,输出结果就行
     */
    vector<int> getMinStack(vector<vector<int> >& op) {
        vector<int> ans;
        if(op.empty()) return ans;

        for(int i=0;i<op.size();i++){
            if(op[i][0]==1 && op[i].size()==2){
                push(op[i][1]);
            }
            else if(op[i][0]==2 && op[i].size()==1)
                pop();
            else if(op[i][0]==3 && op[i].size()==1)
                ans.push_back(getMin());

        }
        return ans;

    }
    void push(int data){
        if(minStack.empty() ||data<minStack.top())
            minStack.push(data);
        else 
            minStack.push(minStack.top());

        dataStack.push(data);
    }
    void pop(){
        dataStack.pop();
        minStack.pop();
    }
    int getMin(){
        return minStack.top();
    }
private:
    stack<int> dataStack;
    stack<int> minStack;
};
全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务