esign a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) -- Push element x onto stack.pop() -- Removes the element on top of the stack.top() -- Get the top element.getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
class MinStack { public: vector<int> a; vector<int> min; MinStack() { min.push_back(2147483647); } void push(int x) { a.push_back(x); min.push_back(x < min.back() ? x : min.back()); } void pop() { a.pop_back(); min.pop_back(); } int top() { return a.back(); } int getMin() { return min.back(); } }; class MinStack { public: stack<int> st; stack<int> nextMin; void push(int x) { if(st.empty()){ nextMin.push(x); }else if(nextMin.top() >= x){ nextMin.push(x); } st.push(x); } void pop() { int tmp = st.top(); st.pop(); if(tmp == nextMin.top()){ nextMin.pop(); } } int top() { return st.top(); } int getMin() { return nextMin.top(); } };