首页 » 编程之美 » 正文

[leetcode]Min Stack

快两年没做题了,压力好大,最近练习一下,保持一种感觉。

这个题据说是《剑指offer》上的一个题,其实我都解法明显有问题,但是还是AC了,我发现PHP,JS,C#写久了,我连Verctor都快不会写了。

此题正确的解法应该是用一个栈来维护最小值,是当前最小值即进入一个栈。另一个栈放数据,即可保证复杂度在O(n),查询复杂度O(1)。

我的解法比较中二:

class MinStack {
private:
    vector<int> stack;
    int min;
public:
    MinStack() {
        stack.clear();<br />
    }
    void push(int x) {
        if (stack.empty() || min &gt; x) {
            min = x;
        }
        stack.push_back(x);
    }</p>

<pre><code>void pop() {
    if (!stack.empty()) {
        stack.pop_back();
        genMin();
    }
}

void genMin() {
    min = *(stack.begin());
    for (vector&amp;lt;int&amp;gt;::iterator i = stack.begin() + 1; i &amp;lt; stack.end(); i++) {
        if (min &amp;gt; *i) {
            min = *i;
        }
    }
}

int top() {
    if (!stack.empty()) {
        return *(stack.end() - 1);
    }
    return false;
}

int getMin() {
    return min;
}
</code></pre>

<p>};

发表评论