33、简单的栈实现

一开始想的是直接使用一个栈来保存所有的数据,但是会发现在寻找最小值时会有时间的不够
因此考虑使用两个栈来保存,一个就是栈,另一个就是保存最小值

class MinStack {

    /** initialize your data structure here. */
  	Stack<Integer> s1;
		Stack<Integer> s2;
		public MinStack() {
	        s1 = new Stack<>();
	        s2 = new Stack<>();
	    }
	    
	    public void push(int x) {
	    	if(s2.isEmpty()){
	    		s2.push(x);
	    	}
            else if(x <= s2.peek()){
	    		s2.push(x);
	    	}
	    	s1.push(x);
	        
	    }
	    
	    public void pop() {
	        if(s1.peek().equals(s2.peek())){ **//这里一定要是比较的是值,因此使用的是equals,一定要注意**
	        	s2.pop();
	        }
	        s1.pop();
	    }
	    
	    public int top() {
	        return s1.peek();
	    }
	    
	    public int getMin() {
	    	return s2.peek();
	        
	    }
}

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

需要注意的是比较的时候是进行值的比较而不是地址的比较,== 相当于比较地址
排名高的代码,思路都差不多,其实都是在取出最小值的时候进行优化,使用两个栈进行

class MinStack {

     private LinkedList<Integer> stack;
    private LinkedList<Integer> minStack;

    /** initialize your data structure here. */
    public MinStack() {
        stack = new LinkedList<>();
        minStack = new LinkedList<>();
    }

    public void push(int x) {
        stack.push(x);
        if(minStack.isEmpty() || x <= minStack.peek().intValue())
        {
            minStack.push(x);
        }
    }

    public void pop() {
        if(stack.isEmpty() || minStack.isEmpty())return;
        if(stack.peek().intValue() == minStack.peek().intValue())minStack.pop();
        stack.pop();

    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }
}

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

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/84076106