package com.github.orajavac.coding2017.basic.stack;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
* @author liuxin
*
*/
public class QuickMinStack {
private Stack s1 = new Stack();
private Stack s2 = new Stack();
private int min = 0;
public void push(int data){
if(s1.length() == 0){
s1.push(data);
s2.push(data);
min = data;
}else{
if (data <= min){
s2.push(data);
min = data;
}
s1.push(data);
}
}
public int pop(){
Integer result = Integer.parseInt(s1.pop().toString());
if (result == min){
min = Integer.parseInt(s2.pop().toString());
}
return result;
}
public int findMin(){
Integer min_ = Integer.parseInt(s2.pop().toString());
s2.push(min_);
return min_;
}
//测试使用,观察栈里元素
public void toStrings(){
System.out.println("s1 = "+s1.positiveToString());
System.out.println("s2 = "+s2.positiveToString());
}
}