voidpop(){ int t = s.top(); s.pop(); if (t == mn) { // 当要出栈的数跟当前最小值一样时,下一个栈顶的数一定是一个旧的最小值,用这个旧的最小值来给mn赋值 mn = s.top(); s.pop(); } }
inttop(){ return s.top(); }
intgetMin(){ return mn; }
stack<int> s; int mn = INT_MAX; };
/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */
classMinStack { public: /** initialize your data structure here. */ MinStack() {
}
voidpush(int x){ s.push(x); m.push(m.empty() ? x : min(m.top(), x)); }
voidpop(){ s.pop(); m.pop(); }
inttop(){ return s.top(); }
intgetMin(){ return m.top(); }
stack<int> s; stack<int> m; };
/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */
/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */
intgetMin(){ int res = INT_MAX; if (!front.empty()) { res = min(res, front.getMin()); } if (!back.empty()) { res = min(res, back.getMin()); } return res; }
voidrearrange(){ if (front.empty()) { while (!back.empty()) { front.push(back.pop()); } } }