package com.donaldy.basic.stack;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
* @author liuxin
*
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Stack;
/**
* 不改变栈的本身性质,
* 在其基础上添加findMin,
* findMin是找到最小的值,而不是返回的同时把元素弹出栈。
*/
public class QuickMinStack {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Stack<Integer> stack = new Stack<>();
public void push(int data){
this.stack.push(data);
this.arrayList.add(data);
sort();
}
private void sort() {
Collections.sort(this.arrayList);
}
public int pop(){
int oldData = this.stack.pop();
this.arrayList.remove(new Integer(oldData));
return oldData;
}
public int findMin(){
if (this.arrayList.isEmpty()) {
throw new IndexOutOfBoundsException("stack is empty.");
}
return this.arrayList.get(0);
}
}