一个栈存输入的数据。
一个栈存每次输入后,该阶段的最小值。
以空间换时间,每次添加新元素,保存此时最小值元素。
class Solution { public: stack<int> s,min_s; vector<int> getMinStack(vector<vector<int> >& op) { vector<int> res; int op_size = op.size(); for(int i = 0;i < op_size; i++){ if(op[i][0] == 1) { // push s.push(op[i][1]); //当min_s为空或push的值比当前栈中最小值小或等于时,将它push到保存最小值的栈。 if(min_s.empty() || min_s.top() >= op[i][1]) min_s.push(op[i][1]); } else if(op[i][0] == 2){ if(!s.empty()){ // 当s不为空且储存最小值栈中栈顶与要pop的元素一样,两个栈同时pop if(s.top() == min_s.top()) min_s.pop(); s.pop(); } } else res.push_back(min_s.top()); } return res; } };