首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

100分排序栈的代码

2012-02-13 
100分求一个排序栈的代码这个排序栈包含5个功能:1,POP2,PUSH3,取得栈中元素的最大值4,取得栈中元素的最小

100分求一个排序栈的代码
这个排序栈包含5个功能:
1,POP 
2,PUSH
3,取得栈中元素的最大值
4,取得栈中元素的最小值
5,取得栈中元素中值排在中间的元素的值

要求上面五个方法时间复杂度相同,且速度越快越好。

我能想到的最好的办法是 3,4,5为o(1),POP PUSH为 o(N),但是题目要5个复杂度相同,我预计最好的方法是5个都是logn。




[解决办法]
都为logn显然不是答案,logn做法太直接

直接一个普通的栈+一个平衡树(比如sbt)
[解决办法]
栈中除了存一个栈顺序数组,还存一个值索引.
复杂度pop,push o(log2n), max, min, middle o(1)
[解决办法]

探讨
栈中除了存一个栈顺序数组,还存一个值索引.
复杂度pop,push o(log2n), max, min, middle o(1)

[解决办法]
探讨
栈中除了存一个栈顺序数组,还存一个值索引.
复杂度pop,push o(log2n), max, min, middle o(1)

[解决办法]
利用辅助栈的方法可以让前4个操作都是o(1)

但是取中值o(1)实在是想不出来
[解决办法]
探讨

直接放一个数组不就好了
然后2分排序还是插入排序
1,POP (取下标0)
2,PUSH (排序)
3,取得栈中元素的最大值 (去数组长度)
4,取得栈中元素的最小值(取下标0)
5,取得栈中元素中值排在中间的元素的值(去数组长度除以2)

热点排行