[leetcode]Min Stack

来源:互联网 发布:filter() 数组 编辑:程序博客网 时间:2024/06/05 09:34

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
getMin() – Retrieve the minimum element in the stack.

这道题要实现堆栈的一些操作,但要求O(1)的时间复杂度。看了discuss 才知道用一个额外的堆栈来维护最小值。感觉是一种比较普遍的方法:用算法的空间复杂度来换取时间复杂度

class MinStack {public:    vector<int> a;    vector<int> min;    int top() {        return a[a.size()-1];    }    void push(int x) {        a.push_back(x);        if(min.empty()||(!min.empty() && min[min.size()-1] >= x)){            min.push_back(x);        }    }    void pop() {        if(!a.empty()){            if(a[a.size()-1]==min[min.size()-1]) min.pop_back();            a.pop_back();        }    }    int getMin() {        if(!min.empty())        return min[min.size()-1];    }};
0 0