思路:本題需要使用兩個棧,一個就是正常棧,執行出入操作,另一個棧只負責將對應的最小值進行保存即可.每次入棧的時候,最小值棧的棧頂也需要入棧元素,不過這個元素是最小值,那么就需要進行比較,因此在getmin()的時候只需要將最小值棧的棧頂元素彈出即可.初始化的時候只需要將最小值棧的元素用最大值(INT_MAX)進行初始化.
class MinStack {// 最小值棧的棧頂就是正常棧的最小值元素// 每次正常棧入棧和出棧都需要和最小值棧的棧頂元素比較stack<int> my_s;stack<int> min_s;
public:MinStack() {// 初始化就是在最小值棧中放入最大的元素min_s.push(INT_MAX);}void push(int val) {my_s.push(val);min_s.push(min(val, min_s.top()));}void pop() {// 出棧的時候必須同時出棧my_s.pop();min_s.pop();}int top() {return my_s.top();}int getMin() {return min_s.top();}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/