[LeetCode] 155. Min Stack Java

题目:

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.

题意及分析:实现一个stack,要求有push,pop,top功能,还要有一个返回stack最小值的函数(要在常量时间里返回这个值)。在这里我用一个LinkList来实现stack,具体看下面代码。对于最小值,在每次添加或者删除的时候记录即可,这样就能在常量时间获得stack的最小值。

代码:

public class MinStack {

    /** initialize your data structure here. */
    LinkedList<Integer> linkedList=new LinkedList<>();
	int min=Integer.MAX_VALUE;
    /** initialize your data structure here. */
    public MinStack() {
    }
    
    public void push(int x) {
        linkedList.add(x);
        if(x<min)
        	min=x;
    }
    
    public void pop() {
    	if(min<linkedList.getLast()) //min不变
    		linkedList.removeLast();
    	else{
    		linkedList.removeLast();
    		min=Integer.MAX_VALUE;
    		for(int i=0;i<linkedList.size();i++){
    			if(linkedList.get(i)<min)
    				min=linkedList.get(i);
    		}
    	}
        
    }
    
    public int top() {
        return linkedList.getLast();
    }
    
    public int getMin() {
        return min;
    }
}

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

  

原文地址:https://www.cnblogs.com/271934Liao/p/7027635.html