有三种操作种类,op1表示push,op2表示pop,op3表示getMin。你需要返回和op3出现次数一样多的数组,表示每次getMin的答案
1<=操作总数<=1000000
-1000000<=每个操作数<=1000000
数据保证没有不合法的操作
代码:
class Solution {
private:
stack<int>st,min_st;//一个辅助栈用于实现栈操作,min_st则用于保存最小元素
public:
/**
* return a array which include all ans for op3
* @param op int整型vector<vector<>> operator
* @return int整型vector
*/
vector<int> getMinStack(vector<vector<int> >& op) {
// write code here
vector<int>res;
for(int i = 0;i < op.size();++i)
{
if(op[i][0] == 1)Push(op[i][1]);
else if(op[i][0] == 2)Pop();
else res.push_back(getmin());
}
return res;
}
void Push(int x)
{
//min_st中栈顶到栈底元素大小依次增大
st.push(x);//每次min_st为空或者入进来的元素比min_st的top元素小 就也给加入到min_st
if(min_st.empty() || st.top() < min_st.top())min_st.push(x);
}
void Pop()
{
if(!st.empty())
{
//如果st和minst中栈顶元素相同 删除的时候应同时删除
if(st.top() == min_st.top())min_st.pop();
st.pop();
}
}
int getmin()
{
return min_st.top();
}
};