今天有哥们考我一道算法题:
哥们: 实现一个堆栈,可以任意的入栈,出栈
偶: 这很简单啊,用顺序结构还是链式结构都可以。不过既然是任意的,那就用链式结构好了。算偶过关。窃喜。
哥们:同样要求实现一个堆栈,实现三个接口,Pop(), Push(), GetMaxValue(), 要求时间复杂度均为O(1)
偶:很简单啊。 额外分配一个空间,记录最大制,每次Pop,Push的时候,维护这个最大值就可以了。
哥们: 那怎么维护呢。比如Push()的时候,Pop()的时候。。。?
偶:Push的时候,Push值和已知最大值比较,有必要的话交换。Pop的时候,Pop的时候,Pop的时候。。。
哥们:如果Pop的是现在的最大值怎么处理?
偶:。。。
又思考若干时间:
还没有思路,但感觉能达到Get的时候取值为O(1)的,就只有Hashtable了。最终未解。
哥们:为了满足时间,牺牲点空间也无所谓。考虑下面的结构
偶:恍然大悟。。。。遂奉上冰棍一个,以示感谢。
偶:如果把辅助站的内容精简下呢,比如有重复的,只存一个如何?
哥们:假如现在我遇到数据栈中的200要出栈,那辅助站中的200是否出栈呢?
偶:。。。恍然大悟