Saturday, November 22, 2014

155. Min Stack (easy)

Q:

Design 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.

A:

思想很简单。
后来出现memory out of limit, minStack中就没有存多余的最小值。

class MinStack {
public:
    /** initialize your data structure here. */
    vector<int> stack;
    vector<int> minStack;
    MinStack() {
        
    }
    
    void push(int x) {
        stack.push_back(x);
        if(minStack.empty() || minStack.back() > x)
            minStack.push_back(x);
        else
            minStack.push_back(minStack.back());
    }
    
    void pop() {
        stack.pop_back();
        minStack.pop_back();
    }
    
    int top() {
        return stack.back();
    }
    
    int getMin() {
        return minStack.back();
    }
};

/**
 * 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();
 */

Learned:

1;  minStack中,重复的最小值也要存。
2:即使Stack<Integer>的返回值是一个对象,因此要用.equals()来比较大小

No comments:

Post a Comment