Create 155. Min Stack.md

This commit is contained in:
唐树森 2018-10-15 23:51:04 +08:00 committed by GitHub
parent 774dc20d12
commit ec02c248e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

31
155. Min Stack.md Normal file
View File

@ -0,0 +1,31 @@
# [155. Min Stack](https://leetcode.com/problems/min-stack/description/)
# 思路
实现最小栈要求所有操作的时间复杂度都为O(1)。
可考虑用两个站S1、S2S1就正常记录minStack的值而S2的栈顶记录了当前Minstack的最小值。S2的更新规则见代码。
# C++
```
class MinStack {
private:
stack<int> s1;
stack<int> s2; // S2的栈顶记录了当前Minstack的最小值
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
s1.push(x);
if (s2.empty() || x <= getMin()) s2.push(x); // 新来的x比getMin还小说明是新的最小值应该入栈S2
}
void pop() {
if (s1.top() == getMin()) s2.pop(); // 若pop掉了最小元素则S2也应该pop一个
s1.pop();
}
int top() {
return s1.top();
}
int getMin() { // S2的栈顶记录了当前Minstack的最小值
return s2.top();
}
};
```