要求:pop push min时间复杂度为O(1)
思路:辅助栈,存入最小值所在位置,同对象栈一起更新
//设计包含min函数的栈,要求pop push min时间复杂度都是O(1)
//程序部分函数未写,例如判断空栈和满栈
public class StackWithMin>{
public ArrayListobjectstack=new ArrayList();//对象栈
public ArrayListminstack=new ArrayList();//最小值栈
//入栈
public void push(Anytype ob)
{
if(!this.isFull())
{
if(this.isEmpty())
{
objectstack.add(ob);
minstack.add(0);
}
else
{
Anytype min=objectstack.get(minstack.get(minstack.size()-1));
objectstack.add(ob);
if(ob.compareTo(min)<0)
minstack.add(objectstack.size()-1);
else
minstack.add(minstack.get(minstack.size()-1));
}
}
else
System.out.println("stack is full!");
}
//出栈
public Anytype pop()
{
try
{
minstack.remove(minstack.size()-1);
return objectstack.remove(objectstack.size()-1);
}
catch(Exception e)
{
System.out.println("stack is empty!");
throw e;
}
}
//获得栈最小值
public Anytype findMin()
{
try
{
return objectstack.get(minstack.get(minstack.size()-1));
}
catch(Exception e)
{
System.out.println("stack is empty!");
throw e;
}
}