LeetCode/solutions/155. Min Stack.md
2019-09-13 23:08:41 +08:00

32 lines
969 B
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [155. Min Stack](https://leetcode.com/problems/min-stack/description/)
# 思路
实现最小栈要求所有操作的时间复杂度都为O(1)。
可考虑用两个站S1、S2S1就正常记录minStack的值而S2的栈顶记录了当前Minstack的最小值。S2的更新规则见代码。
# C++
``` 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();
}
};
```