【LeetCode】剑指 Offer 30. 包含min函数的栈
【LeetCode】剑指 Offer 30. 包含min函数的栈
文章目录
- 【LeetCode】剑指 Offer 30. 包含min函数的栈
- 一、辅助栈
一、辅助栈
解题思路:
普通栈的 push() 和 put() 函数的复杂度为 O(1),而获取栈最小值 min() 函数需要遍历整个栈,复杂度为 O(n)
本题难点:将 min() 函数复杂度降为 O(1),可通过建立辅助栈实现
- 数据栈 A:栈 A 用于存储所有元素,保证入栈 push() 函数、出栈 pop() 函数、获取栈顶 top() 函数的正常逻辑
- 数据栈 B:栈 B 中存储栈 A 中所有非严格降序的元素,则栈 A 中的最小元素始终对应栈 B 的栈顶元素,即 min() 函数只需返回栈 B 的栈顶元素即可
因此只需设法维护好栈 B 的元素,使其保持非严格降序,即可实现 min() 函数的 O(1) 复杂度
函数设计:
push(x) 函数:重点为保持栈 B 的元素是非常严格降序的
- 将 x 压入栈 A(即 A.add(x))
- 若栈为空或 x 小于等于栈 B 的栈顶元素,则将 x 压入栈 B(即 B.add(x))
pop() 函数:重点为保持 A、B 的元素一致性
- 执行栈 A 出栈(即 A.pop()),将出栈元素记为 y
- 若 y 等于栈 B 的栈顶元素,则执行栈 B 出栈(即 B.pop())
top() 函数:直接返回栈 A 的栈顶元素即可,即返回 A.peek()
min() 函数:直接返回栈 B 的栈顶元素即可,即返回 B.peek()
class MinStack{Stack<Integer> A;Stack<Integer> B;public MinStack(){A = new Stack<>();B = new Stack<>();}public void push(int x){A.add(x);if(B.empty() || B.peek() >= x)B.add(x);}public void pop(){if(A.pop().equals(B.peek()))B.pop();}public int top(){return A.peek();}public int min(){return B.peek();}
}
- 时间复杂度 O(1):push()、pop()、top()、min() 四个函数的时间复杂度均为常数级别
- 空间复杂度 O(n):当共有 n 个待入栈元素时,辅助栈 B 最差情况下存储 n 个元素,使用 O(n) 额外空间
【LeetCode】剑指 Offer 30. 包含min函数的栈相关推荐
- Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈
Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈 大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术 ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 剑指 Offer 30. 包含min函数的栈 (python实现)
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...
- 【简洁写法】剑指 Offer 30. 包含min函数的栈
立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...
- 剑指offer——30.包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 知识点: 这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈 注意: 无 代码实现 ...
- 【算法】剑指 Offer 30. 包含min函数的栈
文章目录 1.概述 2.分析 3. 链表法 4. 双栈法 1.概述 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bao-han-minhan ...
- 剑指Offer 30.包含 min 函数的栈(Python)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.top.push 及 pop 的时间复杂度都是 O(1). # 例子: MinStack minSta ...
- 剑指 Offer 30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinStack minStack = n ...
- 剑指 Offer 30. 包含min函数的栈(python3编写)
目录 1.题目描述: 2.方法: 思路: 代码: 1.题目描述: 2.方法: 思路: 思路来源:https://leetcode-cn.com/problems/bao-han-minhan-shu- ...
最新文章
- 【新概念第一册】Lesson_29 Come in,Amy.
- 人工智能:自由能理论,AI未来的数学模型
- Redis分布式锁原理解析
- 数据结构中图的一些定义
- P2446 [SDOI2010]大陆争霸
- iframe懒加载_懒加载是如何实现的?
- VB与数据库连接方式
- 实验4——Pspice
- V-REP 插件教程
- sql server 2005 修改表的模式 schema 为dbo
- OCR--PC单机版车牌识别技术
- 中棉所建议国家扶持棉花产业
- 解决一个远程主机强迫关闭连接的bug
- 【编程语言】品诺试题
- Unity实用案例之——动画压缩
- 网上书店系统/书店管理系统的设计与实现
- Gartner 魔力象限
- 【微信小程序】全局数据共享
- 【UNIX环境高级编程】
- oralce函数大全
热门文章
- jdk包含java语言核心的类_1.1 jvm核心类加载器--jdk源码剖析
- 如何查看服务器数据库修改密码,如何查看服务器数据库密码
- java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合
- 时序数据库php,时序数据库InfluxDB
- java netty和dubbo_Dubbo与Netty杂谈
- %02 java_02_Java语法
- GIT 学习笔记 - 20181201
- Cannot add foreign key constraint 错误
- 修改一个CGRect的值
- 一个图文混排问题的解决过程