package com.coding.basic.stack; import java.util.ArrayList; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回该数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * @author liuxin * */ public class QuickMinStack { private ArrayList<int[]> elementData = new ArrayList<int[]>(); public Boolean isEmpty(){ return elementData.size() == 0; } public int size(){ return elementData.size(); } public void push(int data){ int[] temp = new int[3];//data min max if(isEmpty()){ temp[0] = data; temp[1] = data; temp[2] = data; elementData.add(temp); return; } int min = this.elementData.get(size()-1)[1]; int max = this.elementData.get(size()-1)[2]; temp[0] = data; if(data < min){ temp[1] = data; }else{ temp[1] = min; } if(data > max){ temp[2] = data; }else{ temp[2] = max; } elementData.add(temp); } public int pop(){ return this.elementData.remove(size()-1)[0]; } public int peek(){ return this.elementData.get(size()-1)[0]; } public int findMin(){ return this.elementData.get(size()-1)[1]; } public int findMax(){ return this.elementData.get(size()-1)[2]; } }