剑指Offer 30.包含 min 函数的栈(Python)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 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)相关推荐
- 剑指 Offer 30. 包含min函数的栈 (python实现)
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 【LeetCode】剑指 Offer 30. 包含min函数的栈
[LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...
- Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈
Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术 ...
- 【简洁写法】剑指 Offer 30. 包含min函数的栈
立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...
- 剑指offer——30.包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 知识点: 这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈 注意: 无 代码实现 ...
- 剑指offer:包含min函数的栈 python实现
题目 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 暴力做法: 遍历一遍,找最小的数,然后返回. # -*- coding ...
- 【算法】剑指 Offer 30. 包含min函数的栈
文章目录 1.概述 2.分析 3. 链表法 4. 双栈法 1.概述 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bao-han-minhan ...
- 剑指 Offer 30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinStack minStack = n ...
最新文章
- python实现找零钱_找零钱的最优步骤 探究(python)
- 第十五届全国大学生智能车全国总决赛获奖信息-东北赛区
- c语言哪个编译软件能够将整个工程自动生成调用图_这10个C语言技巧让初学者少走180天弯路!...
- Mysql和Redis数据同步该怎么做
- android xml配置,Android XML设置z-Index
- 北大保安又双叒…出“传奇”!这次是挑战“天下第一考”
- 对联广告(jQuery)
- 排序算法之——选择排序分析
- Web前端干货!30道Web前端面试题精选,你会几个?
- p9plus升级鸿蒙,华为P9 Plus(VIE-AL10 EMUI 8.0)手机完美获取root教程,最强root工具,亲测可用!...
- Vscode 快速打开setting.json
- 最新爱叶解析接口搭建php网站源码 附4k画质测试效果
- USB OTG的工作原理
- 单例模式之懒汉式单例模式
- RPM软件包和YUM软件仓库的实例
- Rails db rake命令
- 给大家推荐一个免费好用的ico图标、png、icns下载地址!
- 生信学习——R语言练习题-初级(附详细答案解读)
- 魔力宝贝道具服务器无响应,魔力宝贝:关于道具服务器第一天的感想
- Properly shutting down MongoDB database connection from C# 2.1 driver?
热门文章
- 数据结构中括号匹配的代码实现(C语言)
- 微软基于云计算免费杀毒软件Morro曝光
- linux ubuntu下安装图片处理工具Photivo
- 《中台架构与实现》读书笔记
- 小学信息技术 计算机的灵魂 软件 教案,小学信息与信息技术教案
- [IOS]如何设置section的title和改变section的背景色及样式
- camera model
- 课程设计——前方交会
- python 拓扑排序_Python 拓扑排序
- matlab换热器优化设计,matlab用于求解一个简单的优化设计问题 - 数学 - 小木虫 - 学术 科研 互动社区...