面试30题:

题目:包含min函数的栈

题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push、pop的时间复杂度都是O(1)

解题思路:1)如果每次压入新元素时,再调整让新元素位于栈顶,这种思路不能保证最后压入栈的元素最先出栈,因此这个数据结构已经不是栈了。X

2)如果在栈中添加一个成员变量存放最小元素,那么当最小元素弹出后,就不知道下一个最小元素在哪儿了。因此,必须将次小元素保存。X

     3)把每次的最小元素保存起来放在另一个辅助栈里。 √

解题代码:

# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack=[]
self.minstack=[] def push(self, node):
# write code here
self.stack.append(node)
if self.minstack==[] or node<self.min():
self.minstack.append(node)
else:
self.minstack.append(self.min()) def pop(self):
# write code here
if self.stack==[] or self.minstack==[]:
return None
self.stack.pop()
self.minstack.pop() def top(self):
# write code here
return self.stack[-1]
def min(self):
# write code here
return self.minstack[-1]

最新文章

  1. C#学习笔记-图像处理篇(一)绘制公章
  2. paip.环境配置整合 ibatis mybatis proxool
  3. 初探接口测试框架--python系列4
  4. IOS中 如何去除Tabview里面cell之间的下划线
  5. GNU make 总结 (一)
  6. LDA(Latent Dirichlet Allocation)
  7. ORACLE VS MYSQL
  8. java正则表达式验证汉字
  9. [转]Flash、Flex、AS3.0框架及类库资源收集之十全大补
  10. 英文版Ubuntu安装配置搜狗拼音输入法
  11. 外显率&amp;显性上位
  12. (原)HashMap之java8新特性
  13. linux 压缩解压打包工具大集合
  14. JGUI源码:实现图标按钮及下拉菜单(16)
  15. Navicat for MySQL下载安装和破解教程
  16. (6.1)linux操作系统基础
  17. 面试简单整理之zookeeper
  18. 2017-12-15python全栈9期第二天第四节之格式化输出%s和用户交互个人简历模板
  19. Hibernate懒加载解析
  20. 移动WEB开发基础入门

热门文章

  1. c语言编写51单片机中断程序,执行过程是怎样的?
  2. Redis命令学习-string类型操作
  3. Quarta介绍
  4. python模块学习之__future__
  5. 解决双系统开机no such device:
  6. DataUml Design 介绍11 - DataUML 1.5版本功能(支持无Oracle客户端连接,有图有真相)
  7. springMVC集成mybatis-paginator实现分页
  8. 超级拷贝scp
  9. ubuntu中怎样添加或删除一个PPA源
  10. WCF服务寄宿IIS与Windows服务