[leetcode]Min Stack

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

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

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

我的解法比较中二:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class MinStack {
private:
    vector<int> stack;
    int min;
public:
    MinStack() {
        stack.clear();
    }
    
    void push(int x) {
        if (stack.empty() || min > x) {
            min = x;
        }
        stack.push_back(x);
    }

    void pop() {
        if (!stack.empty()) {
            stack.pop_back();
            genMin();
        }
    }

    void genMin() {
        min = *(stack.begin());
        for (vector<int>::iterator i = stack.begin() + 1; i < stack.end(); i++) {
            if (min > *i) {
                min = *i;
            }
        }
    }

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

    int getMin() {
        return min;
    }
};
Licensed under CC BY-NC-SA 4.0