现在的位置: 首页 > 综合 > 正文

实现一堆栈,要求三个操作,Pop,Push,GetMaxValue,时间均为O(1)

2013年11月23日 ⁄ 综合 ⁄ 共 490字 ⁄ 字号 评论关闭

今天有哥们考我一道算法题:

哥们: 实现一个堆栈,可以任意的入栈,出栈

偶: 这很简单啊,用顺序结构还是链式结构都可以。不过既然是任意的,那就用链式结构好了。算偶过关。窃喜。

哥们:同样要求实现一个堆栈,实现三个接口,Pop(), Push(), GetMaxValue(), 要求时间复杂度均为O(1)

偶:很简单啊。 额外分配一个空间,记录最大制,每次Pop,Push的时候,维护这个最大值就可以了。

哥们: 那怎么维护呢。比如Push()的时候,Pop()的时候。。。?

偶:Push的时候,Push值和已知最大值比较,有必要的话交换。Pop的时候,Pop的时候,Pop的时候。。。

哥们:如果Pop的是现在的最大值怎么处理?

偶:。。。

 

又思考若干时间:

还没有思路,但感觉能达到Get的时候取值为O(1)的,就只有Hashtable了。最终未解。

哥们:为了满足时间,牺牲点空间也无所谓。考虑下面的结构

偶:恍然大悟。。。。遂奉上冰棍一个,以示感谢。

偶:如果把辅助站的内容精简下呢,比如有重复的,只存一个如何?

哥们:假如现在我遇到数据栈中的200要出栈,那辅助站中的200是否出栈呢?

偶:。。。恍然大悟

 

 

【上篇】
【下篇】

抱歉!评论已关闭.