155最小栈

155最小栈

下面是题目

下面是题目给出的模板

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
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {}

void push(int x) {

}

void pop() {

}

int top() {

}

int getMin() {

}

};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/

优质解答分析

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
44
45
46
//题目要求我们来写一个类,我们就在类里面写方法,把这个类想成一个黑匣子
//外面的人想要什么,调用这个类里的方法,我们就返回什么,我们怎么返回的,外面管不着
class MinStack {
//于是我们想到用对去构造一个栈,每次把<当前栈的最小值,当前栈的顶部>入栈
private:
int min = INT_MAX;
stack<pair<int, int>> minStack;

public:
/** initialize your data structure here. */
MinStack() {}

void push(int x) {
//如果出现了新的最小值,那么把min更新
if(x < min) {
min = x;
}
//每次压入当前的最小值,栈顶这一个对
minStack.push(make_pair(min, x));
}
void pop() {
minStack.pop();
//每次pop需要判断栈是否为空,如果栈空,那么把最小值设为无限大
if (minStack.empty()) {
min = INT_MAX;
} else {
//否则,把最小值设置为栈顶的min值
//这样,如果刚才被pop掉的不是最小值,那么min不变,否则变成倒数第二小的
min = minStack.top().first;
}
}
int top() {
return minStack.top().second;
}
int getMin() {
return minStack.top().first;
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
-------------本文结束,感谢您的阅读-------------