【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 的元素是非常严格降序的

  1. 将 x 压入栈 A(即 A.add(x))
  2. 若栈为空或 x 小于等于栈 B 的栈顶元素,则将 x 压入栈 B(即 B.add(x))

pop() 函数:重点为保持 A、B 的元素一致性

  1. 执行栈 A 出栈(即 A.pop()),将出栈元素记为 y
  2. 若 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函数的栈相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 剑指Offer 30.包含 min 函数的栈(Python)

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

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

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

  9. 剑指 Offer 30. 包含min函数的栈(python3编写)

    目录 1.题目描述: 2.方法: 思路: 代码: 1.题目描述: 2.方法: 思路: 思路来源:https://leetcode-cn.com/problems/bao-han-minhan-shu- ...

最新文章

  1. 【新概念第一册】Lesson_29 Come in,Amy.
  2. 人工智能:自由能理论,AI未来的数学模型
  3. Redis分布式锁原理解析
  4. 数据结构中图的一些定义
  5. P2446 [SDOI2010]大陆争霸
  6. iframe懒加载_懒加载是如何实现的?
  7. VB与数据库连接方式
  8. 实验4——Pspice
  9. V-REP 插件教程
  10. sql server 2005 修改表的模式 schema 为dbo
  11. OCR--PC单机版车牌识别技术
  12. 中棉所建议国家扶持棉花产业
  13. 解决一个远程主机强迫关闭连接的bug
  14. 【编程语言】品诺试题
  15. Unity实用案例之——动画压缩
  16. 网上书店系统/书店管理系统的设计与实现
  17. Gartner 魔力象限
  18. 【微信小程序】全局数据共享
  19. 【UNIX环境高级编程】
  20. oralce函数大全

热门文章

  1. jdk包含java语言核心的类_1.1 jvm核心类加载器--jdk源码剖析
  2. 如何查看服务器数据库修改密码,如何查看服务器数据库密码
  3. java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合
  4. 时序数据库php,时序数据库InfluxDB
  5. java netty和dubbo_Dubbo与Netty杂谈
  6. %02 java_02_Java语法
  7. GIT 学习笔记 - 20181201
  8. Cannot add foreign key constraint 错误
  9. 修改一个CGRect的值
  10. 一个图文混排问题的解决过程