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

# 例子:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3
minStack.pop();
minStack.top();   --> 返回 0
minStack.min();   --> 返回 -2

题解:

首先拿到这道题,可以看到,实现一个栈,并且栈包含入栈、出栈、得到栈顶元素和栈最小值的一些操作,实现这些操作,其实很简单,但是题目要求时间复杂度为O(1),这样的话,我们平常的一些方法。就不太好做了。
这里我们可以使用两个栈来完成这个功能
栈A:为主要的栈,像push、pop、top都有它来完成,并且时间复杂度为O(1)
栈B:为辅助栈,主要帮助栈A完成min操作,我们让栈B的栈顶元素一直保持是栈A的最小值,这样执行min操作时,只需要将栈B的栈顶元素弹出就可以了
这种怎么样来实现呢?

  • 在给栈A添加元素的时候,判断:栈B 是否为空,如果为空,则同时将元素添加至栈B;如果栈B不为空,那么判断栈B顶的元素是都大于等于要添加的元素,则同样执行将元素添加至栈B
  • 在给栈A删除元素的时候,判断:如果栈A删除的元素和栈B的栈顶元素相等,则同样删除栈B的栈顶元素

看代码:

class MinStack():def __init__(self):self.stack_A = []self.stack_B = []def push(self,x):self.stack_A.append(x)if not self.stack_B or self.stack_B[-1] >= x:self.stack_B.append(x)def pop(self):vertex = self.stack_A.pop()if vertex == self.stack_B[-1]:self.stack_B.pop()def top(self):return self.stack_A[-1]def min(self):return self.stack_B[-1]a = MinStack()
a.push(-2)
a.push(0)
a.push(-3)
a1 = a.min()
print(f"a1 = {a1}")
a.pop()
a2 = a.top()
print(f"a2 = {a2}")
a3 = a.min()
print(f"a3 = {a3}")
"""
results:a1 = -3a2 = 0a3 = -2
"""

剑指Offer 30.包含 min 函数的栈(Python)相关推荐

  1. 剑指 Offer 30. 包含min函数的栈 (python实现)

    剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...

  2. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  3. 【LeetCode】剑指 Offer 30. 包含min函数的栈

    [LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...

  4. Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈

    Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术 ...

  5. 【简洁写法】剑指 Offer 30. 包含min函数的栈

    立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...

  6. 剑指offer——30.包含min函数的栈

    题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 知识点: 这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈 注意: 无 代码实现 ...

  7. 剑指offer:包含min函数的栈 python实现

    题目 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 暴力做法: 遍历一遍,找最小的数,然后返回. # -*- coding ...

  8. 【算法】剑指 Offer 30. 包含min函数的栈

    文章目录 1.概述 2.分析 3. 链表法 4. 双栈法 1.概述 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bao-han-minhan ...

  9. 剑指 Offer 30. 包含min函数的栈

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

最新文章

  1. python实现找零钱_找零钱的最优步骤 探究(python)
  2. 第十五届全国大学生智能车全国总决赛获奖信息-东北赛区
  3. c语言哪个编译软件能够将整个工程自动生成调用图_这10个C语言技巧让初学者少走180天弯路!...
  4. Mysql和Redis数据同步该怎么做
  5. android xml配置,Android XML设置z-Index
  6. 北大保安又双叒…出“传奇”!这次是挑战“天下第一考”
  7. 对联广告(jQuery)
  8. 排序算法之——选择排序分析
  9. Web前端干货!30道Web前端面试题精选,你会几个?
  10. p9plus升级鸿蒙,华为P9 Plus(VIE-AL10 EMUI 8.0)手机完美获取root教程,最强root工具,亲测可用!...
  11. Vscode 快速打开setting.json
  12. 最新爱叶解析接口搭建php网站源码 附4k画质测试效果
  13. USB OTG的工作原理
  14. 单例模式之懒汉式单例模式
  15. RPM软件包和YUM软件仓库的实例
  16. Rails db rake命令
  17. 给大家推荐一个免费好用的ico图标、png、icns下载地址!
  18. 生信学习——R语言练习题-初级(附详细答案解读)
  19. 魔力宝贝道具服务器无响应,魔力宝贝:关于道具服务器第一天的感想
  20. Properly shutting down MongoDB database connection from C# 2.1 driver?

热门文章

  1. 数据结构中括号匹配的代码实现(C语言)
  2. 微软基于云计算免费杀毒软件Morro曝光
  3. linux ubuntu下安装图片处理工具Photivo
  4. 《中台架构与实现》读书笔记
  5. 小学信息技术 计算机的灵魂 软件 教案,小学信息与信息技术教案
  6. [IOS]如何设置section的title和改变section的背景色及样式
  7. camera model
  8. 课程设计——前方交会
  9. python 拓扑排序_Python 拓扑排序
  10. matlab换热器优化设计,matlab用于求解一个简单的优化设计问题 - 数学 - 小木虫 - 学术 科研 互动社区...