两个stack实现,一个存数据,一个存最小值
设计getMin功能的栈
http://www.nowcoder.com/questionTerminal/c623426af02d4c189f92f2a99647bd34
class Solution { public: /** [[1,3],[1,2],[1,1],[3],[2],[3]] * 数组第一个代表操作,1==push,2==pop,2==getMin * 所以 1出现时,后面需要接push的数字 * 把所有的操作实现完,输出结果就行 */ vector<int> getMinStack(vector<vector<int> >& op) { vector<int> ans; if(op.empty()) return ans; for(int i=0;i<op.size();i++){ if(op[i][0]==1 && op[i].size()==2){ push(op[i][1]); } else if(op[i][0]==2 && op[i].size()==1) pop(); else if(op[i][0]==3 && op[i].size()==1) ans.push_back(getMin()); } return ans; } void push(int data){ if(minStack.empty() ||data<minStack.top()) minStack.push(data); else minStack.push(minStack.top()); dataStack.push(data); } void pop(){ dataStack.pop(); minStack.pop(); } int getMin(){ return minStack.top(); } private: stack<int> dataStack; stack<int> minStack; };