java 获取最小值_实现O(1)获取最大最小值的栈----java

实现O(1)获取最大最小值的栈和队列----java

一.怎样实现包括获取最小值函数的栈

问题:定义栈的数据结构,请在该类型中实现一个可以得到栈的最小元素的getMin函数。在该栈中,调用getMin、push及pop的时间复杂度都是O(1).

最小值思路:用一个辅助栈stack2记住每次入栈stack1的当前最小值:在stack1入栈时,往stack2中增加当前最小值;stack1元素出栈时,stack2也出栈一个元素。最小值从stack2中获取及栈顶元素。O(1)

最大值思路:同上O(1)

中间值思路:对栈排序。取中间值,可是时间不是O(1)

d9ee2f792ebcb9e2bfb6363812708adf.png

package com.sheepmu;

import java.util.Arrays;

import java.util.Stack;

public class SpecialStack>

{

Stack stack1=new Stack();

Stack stackMin=new Stack();//存放求最小值的栈

Stack stackMax=new Stack();//存放求最大值的栈

public void push(E e)

{

stack1.push(e);

if(stackMin.isEmpty()||e.compareTo(stackMin.peek())<0)

stackMin.push(e);//若最小栈为空push进stack时就同一时候把它push进stackMin;

else if(e.compareTo(stackMin.peek())>0)

stackMin.push(stackMin.peek());

if(stackMax.isEmpty()||e.compareTo(stackMin.peek())>0)

stackMax.push(e);

else if(e.compareTo(stackMax.peek())<0)

stackMin.push(stackMax.peek());

}

public E pop()//一定要记着。非空才干pop()

{

if(!stack1.isEmpty()&&!stackMin.isEmpty()&&!stackMax.isEmpty())

{

E e=stack1.pop();

stackMin.pop();

stackMax.pop();

return e;

}

else

{

System.out.println("栈已经为空了");

return null;

}

}

public E getMin()

{

return stackMin.peek();

}

public E getMax()

{

return stackMax.peek();

}

public E getMed()

{

E[] ss=stack1.toArray(new E[stack.size()]);//stack1.toArray()返回的是Object[], 栈----->数组;不能toArray后再强制转换。会报错

Arrays.sort(ss);

return ss[ss.length/2];

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值