package me.lzb.basic.stack;
import java.util.Stack;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
*/
public class QuickMinStack {
private int mini;
private java.util.Stack<Integer> stack = new Stack();
public void push(int data) {
if (stack.size() <= 0) {
mini = data;
} else if (mini > data) {
mini = data;
}
stack.push(data);
}
public int pop() {
if (stack.isEmpty()) {
throw new RuntimeException("stack is empty");
}
int a = stack.pop();
if (a <= mini) {
newMin();
}
return a;
}
public int findMin() {
if (stack.isEmpty()) {
throw new RuntimeException("stack is empty");
}
return mini;
}
private void newMin() {
if (stack.isEmpty()) {
return;
}
int a = stack.peek();
for (int i : stack) {
if (i < a) {
a = i;
}
}
this.mini = a;
}
}