1.最小栈
思路分析:
代码:
class MinStack {
public:
MinStack() {
}
void push(int val) {
st.push(val);
//两种情况需要更新最小值
//1.最小栈为空(就是存最小值的那个栈)
//2.插入的值小于或等于最小栈的栈顶元素
if(minstack.empty()||minstack.top()>=val)
{
minstack.push(val);
}
}
void pop() {
int front=st.top();
st.pop();
if(front==minstack.top())
minstack.pop();
}
int top() {
return st.top();
}
int getMin() {
return minstack.top();
}
//定义两个栈
stack<int> st;
stack<int> minstack;
};
2.栈的压入、弹出序列
思路分析:
代码:
class Solution {
public:
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
//表示当前弹出顺序所在位置的下标
int cur=0;
stack<int> st;
for(auto e: pushV)
{
st.push(e);
while(!st.empty()&&st.top()==popV[cur])
{
cur++;
st.pop();
}
}
return st.empty();
}
};