快两年没做题了,压力好大,最近练习一下,保持一种感觉。
这个题据说是《剑指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;
}
};
|