九章算法面试题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来实现。对于这种问题大家不必纠结,记住这个题就行了。如果问到你这个题然后你又正好没看过也想不出来,那只能说你看的题目还不够多。相关文章推荐
- 九章算法面试题50 队列上实现Min函数
- 九章算法面试题49 用栈实现队列
- PHP的文件操作与算法实现的面试题示例
- lintcode&九章算法——Lintcode No.40 用栈实现队列 ? 待解决
- 九章算法-面试题总结(算法、强化算法、系统设计高清视频观看)
- lintcode&九章算法——Google 面试题 | 多余的连接 ? 待解决
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 算法面试题:使用两个堆栈实现一个队列
- 曾经遇到的一个面试题,快速排序用链表实现,算法和以前的相似,需要注意一些细节处理
- 九章算法面试题77 插入区间
- 九章算法面试题5 有序数组合并
- 九章算法面试题28 链表找环
- 九章算法面试题37 主元素
- 九章算法面试题51 二叉树的序列化
- 九章算法面试题67 3 sum
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构] - c实现
- 九章算法面试题78 有效回文串
- 剑指offer--面试题21:包含min函数的栈--Java实现
- 剑指Offer面试题30:最小的k个数 Java不同算法实现
- 剑指offer 面试题21 实现带有min函数的栈