1. 程式人生 > >leetcode Min Stack

leetcode Min Stack

Min Stack 題目:https://leetcode.com/problems/min-stack/

解題思路:建立兩個棧,一個作為普通的棧,另外一個棧每次棧頂存放最小的元素。

push: 首先比較要加入的元素與minStack 棧頂的元素的大小  x<minStack.peek()  minStack.push(x)   普通棧在任何時候都要加入元素。

pop:首先比較普通棧的棧頂元素與minStack 棧頂的元素的大小  stack.peek()==minStack.peek()  minStack.pop(x)   普通棧在任何時候都要pop。

top: 從普通棧的棧頂獲得元素

getMIn:從最小棧的棧頂獲得元素。

/**
	 * 普通的棧
	 */
	private Stack<Integer> stack=new Stack<>();
	/**
	 * minStack 存取棧中的最小元素
	 */
	private Stack<Integer> minStack=new Stack<>();

	/** initialize your data structure here. */
	public MinStack() {

	}

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

	public void pop() {
		if(stack.peek().equals(minStack.peek())){
			minStack.pop();
		}
		stack.pop();
	}

	public int top() {

		return stack.peek();
	}

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