转载自 玻璃猫 程序员小灰

  

  

  

  

  

  小灰回忆起当时的情景……

  

  

  

  

  

  题目:实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法。要保证这三个方法的时间复杂度都是O(1)。

  

  

  小灰的想法:

  1.创建一个整型变量 min,初始值-1

  2.当第一个元素进栈时,让min=0,即把唯一的元素当做最小值。

  3.之后每当一个新元素近栈,让新元素和min指向位置的元素比较大小。如果Stack[min]大于新元素,则min等于新元素的下标;Stack[min]小于新元素,则不做改变。

  4.当调用getMin方法的时候,直接返回min所指向位置的元素即可。

  

  按这个思路,近栈、出栈、取最小值的时间复杂度都是O(1),空间复杂度也是O(1)。

  

  

  

  

  回忆到此结束……

  

  

  

  

  

  

  

  解法:

  1.设原有的栈叫做栈A,此时创建一个额外的栈B,用于辅助原栈A。

  2.当第一个元素进入栈A的时候,让新元素的下标进入栈B。这个唯一的元素是栈A的当前最小值。(考虑到栈中元素可能不是类对象,所以B栈存储的是A栈元素的下标)

  3.每当新元素进入栈A时,比较新元素和栈A当前最小值的大小,如果小于栈A当前最小值,则让新元素的下标进入栈B,此时栈B的栈顶元素就是栈A当前最小值的下标。

  4.每当栈A有元素出栈时,如果出栈元素是栈A当前最小值,则让栈B的栈顶元素也出栈。此时栈B余下的栈顶元素所指向的,是栈A当中原本第二小的元素,代替刚才的出栈元素成为了栈A的当前最小值。(备胎转正)

  5.当调用getMin方法的时候,直接返回栈B的栈顶所指向的栈A对应元素即可。

  

  这个解法中近栈、出栈、取最小值的时间复杂度都是O(1),最坏情况空间复杂度是O(N)。

  

  扩展题目:

  实现一个队列,带有出队(deQueue),入队(enQueue),取最小元素(getMin)三个方法。要保证这三个方法的时间复杂度都尽可能小。

  

  

  

  

  

  

  小灰回忆起当时的情景……

  

  

  

  

  

  题目:实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法。要保证这三个方法的时间复杂度都是O(1)。

  

  

  小灰的想法:

  1.创建一个整型变量 min,初始值-1

  2.当第一个元素进栈时,让min=0,即把唯一的元素当做最小值。

  3.之后每当一个新元素近栈,让新元素和min指向位置的元素比较大小。如果Stack[min]大于新元素,则min等于新元素的下标;Stack[min]小于新元素,则不做改变。

  4.当调用getMin方法的时候,直接返回min所指向位置的元素即可。

  

  按这个思路,近栈、出栈、取最小值的时间复杂度都是O(1),空间复杂度也是O(1)。

  

  

  

  

  回忆到此结束……

  

  

  

  

  

  

  

  解法:

  1.设原有的栈叫做栈A,此时创建一个额外的栈B,用于辅助原栈A。

  2.当第一个元素进入栈A的时候,让新元素的下标进入栈B。这个唯一的元素是栈A的当前最小值。(考虑到栈中元素可能不是类对象,所以B栈存储的是A栈元素的下标)

  3.每当新元素进入栈A时,比较新元素和栈A当前最小值的大小,如果小于栈A当前最小值,则让新元素的下标进入栈B,此时栈B的栈顶元素就是栈A当前最小值的下标。

  4.每当栈A有元素出栈时,如果出栈元素是栈A当前最小值,则让栈B的栈顶元素也出栈。此时栈B余下的栈顶元素所指向的,是栈A当中原本第二小的元素,代替刚才的出栈元素成为了栈A的当前最小值。(备胎转正)

  5.当调用getMin方法的时候,直接返回栈B的栈顶所指向的栈A对应元素即可。

  

  这个解法中近栈、出栈、取最小值的时间复杂度都是O(1),最坏情况空间复杂度是O(N)。

  

  扩展题目:

  实现一个队列,带有出队(deQueue),入队(enQueue),取最小元素(getMin)三个方法。要保证这三个方法的时间复杂度都尽可能小。

  

漫画算法:最小栈的实现相关推荐

  1. 每天Leetcode 刷题 初级算法篇-设计问题-最小栈

    题目要求: 力扣题解: 代码 /*** @program: mydemo* @description: 设计问题-最小栈* @author: Mr.zeng* @create: 2021-02-19 ...

  2. 【算法】剑指offer-删除链表中重复的节点最小栈

    文章目录 删除链表中重复的节点 最小栈 删除链表中重复的节点 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例 如,链表1->2->3- ...

  3. 招行算法2020届实习技术面编程题:实现O(1)最小栈(手撸代码)

    何为最小栈?栈最基础的操作是压栈(push)和退栈(pop),现在需要增加一个返回栈内最小值的函数(get_min),要求get_min函数的时间复杂度为o(1).python的栈肯定是使用list实 ...

  4. 《漫画算法》读书笔记

    <漫画算法>读书笔记 在图书馆借阅算法书时,看到了一本非常吸引我的算法书--<漫画算法>.算法还能以漫画的方式展示出来吗?我带着我的疑惑翻开了这本书,里面的语言非常接地气,通俗 ...

  5. 漫画算法-小灰的算法之旅-排序算法(四)

    本文内容基于<漫画算法 小灰的算法之旅>,魏梦舒著. 1. 分类 1.1 时间复杂度为O(n^2)的排序算法 1.2 时间复杂度为O(nlogn)的排序算法 1.3 时间复杂度为线性的排序 ...

  6. 《漫画算法》读书心得笔记-未完

    感谢FunTester送的书籍.建议大家买或借来看看,一起学习下.本文主要是记录我看这本书的心得,不一定理解是对的,是我自己悟出来的体会,而不是按书照抄,都是凭自己的理解写出来的,相当于在写一本书了, ...

  7. 程序员小灰的漫画算法和知识总结,高品质强推!!!

    转载自微信号程序员小灰,不定期更新,漫画讲解好评,特来转载. 漫画知识汇总 漫画:深度优先遍历 和 广度优先遍历 漫画:什么是 "图"?(修订版) 漫画:图的 "最短路径 ...

  8. 程序员小灰的漫画算法

    算法 漫画:什么是ConcurrentHashMap? 漫画:高并发下的HashMap 漫画:什么是HashMap? 漫画:什么是红黑树? 什么是AES算法?(整合版) 漫画:什么是SHA系列算法? ...

  9. 漫画算法:什么是 B+ 树?

    https://mp.weixin.qq.com/s/QGepgMbHQ8JeRxVQwAwsxQ 漫画算法:什么是 B+ 树? 2017-07-14 程序员的那些事 (点击上方公众号,可快速关注) ...

  10. 【读书笔记】《漫画算法》:克服对算法的恐惧,从漫画开始

    写在开头 在上小学和初高中的时候,要我写读后感这种东西,我是非常厌恶的.无非就是老师布置的一个作业,还是那种无趣且磨人的工作. 结果十多年过去了,到了工作的年纪,看书反倒是自觉地写起读后感来了,而且居 ...

最新文章

  1. 基于Pytorch再次解读NiN现代卷积神经网络和批量归一化
  2. CSS属性display:inline-block使用揭秘
  3. OpenSceneGraph学习笔记
  4. linux0775权限,Linux权限管理
  5. 一篇文章学会Python函数重写,每天进步一个知识点
  6. 继承ViewGroup:重写onMeasure方法和onLayout、requestlayout方法
  7. 吉他谱----see you again
  8. VSCode 实时预览HTML网页效果 - Live Server插件
  9. Mac使用工具tree,打印项目目录树到Markdown
  10. “春风又绿江南岸”真正的关键是什么?
  11. php树递归算法,PHP二叉树递归算法
  12. java for冒号_浅谈对Java双冒号::的理解
  13. The following error occured:
  14. 线上故障等级和处理规范,看阿里测试工程师如何拿捏
  15. 小暑将至,这组小暑海报送给你们
  16. “小智特惠” Android版已经登录各大电子市场,欢迎试用
  17. ASP.NET搜索引擎
  18. 6-DoF问题相关基础知识笔记
  19. VM15.5虚拟机安装openwrt系统作为旁路由
  20. 2023东北农业大学计算机考研信息汇总

热门文章

  1. 二叉搜索树(创建,插入,删除):基础篇,适合新手观看。
  2. matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)
  3. 经典排序算法(3)——直接插入排序算法详解
  4. HDU - 6967 G I love data structure 线段树维护矩阵 + 细节
  5. Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维
  6. P2446 [SDOI2010]大陆争霸
  7. 牛客题霸 [ 树的直径] C++题解/答案
  8. Matrix Subtraction(小米icpc邀请赛第一场)
  9. AtCoder ZONe Energy Programming Contest 题解
  10. P3577-[POI2014]TUR-Tourism【状压dp】