LeetCode 155. 最小栈
单调栈
再加一个单调栈来维护目前的最小值
C++ 代码
class MinStack {
public:
/** initialize your data structure here. */
stack<int> st;
stack<int> minist;
MinStack() {
}
void push(int x) {
st.push(x);
if (minist.empty() || minist.top() >= x) minist.push(x);
}
void pop() {
if (minist.top() == st.top()) minist.pop();
st.pop();
}
int top() {
return st.top();
}
int getMin() {
return minist.top();
}
};
我们只开一个普通栈和一个变量 min_value 记录最小值。栈中存放当前元素与上一个版本(还没有将这个元素入栈时)最小值的差值。
C++ 代码
class MinStack {
public:
typedef long long LL;
stack<LL> st;
LL minValue = 0;
MinStack() {
}
void push(int x) {
if (st.empty())
{
st.push(x);
minValue = x;
}
else
{
st.push(x - minValue);
minValue = min(minValue, (LL)x);
}
}
void pop() {
if (st.top() < 0) minValue -= st.top();
st.pop();
}
int top() {
if (st.size() == 1) return st.top();
if (st.top() > 0) return st.top() + minValue;
else return minValue;
}
int getMin() {
return minValue;
}
};

浙公网安备 33010602011771号