Saturday, July 11, 2015

[Leetcode]07/09 [Data Structure]Min Stack

/* Time:O(1), Space:O(n) push O(1) pop O(1) top O(1) getMin O(1) */
class MinStack {
    
    ArrayList stack = new ArrayList();
    ArrayList minStack = new ArrayList();
    
    public void push(int x) {
        // check min
        stack.add(x);
        if ( minStack.isEmpty() || minStack.get( minStack.size()-1 ) >= x  )
        {
            minStack.add(x);
        }
    }

    public void pop() {
        // top
        if ( stack.isEmpty() )
        {
            return; 
        }
        int elem = stack.remove( stack.size() -1 );
        if (  !minStack.isEmpty() && elem == minStack.get(minStack.size() -1 )  )
        {
            minStack.remove( minStack.size() -1 );
        }
    }

    public int top() {
        // top
        if (! stack.isEmpty() )
        {
            return stack.get(  stack.size() - 1 );
        }
        return 0;
    }

    public int getMin() {
        // top
        if ( !minStack.isEmpty() )
        {
            return minStack.get( minStack.size() -1 );
        }
        return 0;
    }
}

No comments:

Post a Comment