您的位置:首页 > 职场人生

九章算法面试题23 栈上实现Min函数

2015-05-12 14:10 204 查看

九章算法官网-原文网址

http://www.jiuzhang.com/problem/23/

题目

实现一个带Min函数的栈(Stack),让其可以支持O(1)的Push,O(1)的Pop,O(1)的Top和O(1)的Min(返回整个Stack中的最小元素)。

解答

用两个Stack,其中Stack1保存原始数据。Stack2保存最小值更新序列。如对于数据4 5 3 1 2(最后边是栈顶),Stack1的数据为[4,5,3,1,2],Stack2的数据为[4,3,1],Stack2的Top()一直保存的是Stack1中的最小元素。
Min(): 返回Stack2.Top()
Push(x):首先在Stack1中Push(x),然后比较Stack2的Top与x的大小,如果x更小则Push到Stack2中
Top(): 返回Stack1.Top()

Pop(): 从Stack1中Pop()出栈顶元素,与这个Stack2的Top()进行比较,如果相同,则Stack2中也Pop()出栈顶元素。对于处理存在相同数值元素的问题,可以在Stack2的每个数加一个计数器,计数器减到0则Pop()

面试官角度

说实话这个题目纯粹就是看过就知道,没看过除非你搞过竞赛或者真的特别聪明才可能想得出来。关键点是用两个Stack来实现。对于这种问题大家不必纠结,记住这个题就行了。如果问到你这个题然后你又正好没看过也想不出来,那只能说你看的题目还不够多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: