class Solution { public: void push(int value) { stk1.push(value); // 小于等于stk2栈顶,同时将value压入 stk1和 stk2, 空的时候也压入 stk2 if(stk2.empty()){ stk2.push(value); }else if(value<=stk2.top()) { stk2.push(value); } } void pop() { if(stk1.empty()) return ; // 从 stk1中弹出一个元素 int top = stk1.top(); stk1.pop(); // 如果 stk2的栈顶元素也等于 stk1的栈顶元素,则stk2也弹出栈顶元素 if(!stk2.empty() && top == stk2.top()) stk2.pop(); } int top() { if(stk1.empty()) return -1; return stk1.top(); } int min() { if(stk2.empty()) return -1; // 栈内的最小值即 stk2的栈顶,注意不要弹出去!! int temp =stk2.top(); return temp; } private: stack<int> stk1; stack<int> stk2; };