剑指Offer(二十):包含min函数的栈

搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货

csdn:https://blog.csdn.net/baidu_31657889/

github:https://github.com/aimi-cn/AILearners

一、引子

这个系列是我在牛客网上刷《剑指Offer》的刷题笔记,旨在提升下自己的算法能力。

查看完整的剑指Offer算法题解析请点击:剑指Offer完整习题解析

二、题目

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

1、思路

时间复杂度在1的情况下,我们就不能使用遍历栈的方法了,所以我们的思路是利用一个辅助栈来存放最小值~

栈 3,4,2,5,1

辅助栈 3,3,2,2,1

每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就入栈到当前的辅助栈顶

当出栈时,辅助栈也要出栈

这种做法可以保证辅助栈顶一定都当前栈的最小值~

2、编程实现

python2.7

代码实现方案:

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

AIMI-CN AI学习交流群【1015286623】 获取更多AI资料

分享技术,乐享生活:我们的公众号计算机视觉这件小事每周推送“AI”系列资讯类文章,欢迎您的关注!

最新文章

  1. chrome经常崩溃解决过程
  2. AttributeError: &#39;_csv.reader&#39; object has no attribute &#39;next&#39;
  3. .Net 程序集按需加载机制
  4. [译]git add
  5. 【shell脚本】显示文件的偶数或奇数行
  6. phpcms v9调用多个栏目下文章的方法
  7. arr.sort()排序方法
  8. CentOS终端界面登入Linux
  9. scala学习笔记(1):基本语法与容器
  10. scanf gets fgets区别与联系 puts fputs printf区别与联系
  11. 【Lucene4.8教程之三】搜索
  12. “Failed to access IIS metabase”解决方法
  13. angularjs 动态显示内容适用于$modal
  14. 【Linux】用yum安装JDK(转)
  15. Makefile的obj-y 和 obj-m
  16. 两种方法 更改 EBS R12界面LOGO以及内容
  17. Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性
  18. vs 2017
  19. 用 python 写一个年会抽奖小程序
  20. CSS魔法(五)项目实战

热门文章

  1. IDEA中Lombok插件的安装及使用
  2. nodejs调试工具 node-inspect
  3. scala 抽象类
  4. jquery如何生成图片验证码
  5. Python实现堆
  6. was unable to refresh its cache! status = Cannot execute request on any known server
  7. GoLang 的变量
  8. Fiddler的使用总结
  9. 开启Telnet服务
  10. 在Visual Studio 2019中安装Blend 4.5 SDK