题目

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

思路1

  • 使用一个辅助栈min_stack,用来维护栈的最小的元素
  • 每次添加元素入栈时候,data_stackmin_stack都要同时维护
  • data_stack按照正常的栈压入和弹出顺序,但是min_stack栈不一样,因为要能获取当前栈的最小元素:
    • 如果栈是空的,直接入栈
    • 如果栈不是空的,分两种情况:
      1. 待入栈的元素x小于min_stack栈顶的元素,此时直接将x压入min_stack
      2. 待入栈的元素x大于min_stack栈顶的元素,此时将当前栈顶元素再次压入栈顶

代码

class MinStack {

    LinkedList<Integer> data_stack;
// min_stack为辅助栈
LinkedList<Integer> min_stack; public MinStack() {
// 初始化
data_stack = new LinkedList<>();
min_stack = new LinkedList<>();
} public void push(int x) {
data_stack.push(x);
// 入栈的时候要判断辅助栈是否为空,空的话直接push即可
if (!min_stack.isEmpty()) {
// 判断待入栈的元素x是否大于min_stack栈顶元素,如果小于直接入栈;若大于,则将原来栈顶的元素再次入栈一次
if (x < min_stack.peek()) {
min_stack.push(x);
} else {
min_stack.push(min_stack.peek());
}
} else {
min_stack.push(x);
}
} public void pop() {
// 如果pop的话直接弹出去
// 这里不用担心min_stack辅助栈的最小元素被pop出去,因为min_stack和data_stack是一一对应的,同时pop出去对获取当前栈的最小值没有影响
data_stack.pop();
min_stack.pop();
} public int top() {
// 查看当前栈的栈顶也是直接peek
return data_stack.peek();
} public int min() {
// 辅助栈的栈顶元素就是当前栈中的最小的元素
return min_stack.peek();
}
}

复杂度分析

  • 时间复杂度:\(O(1)\)
  • 空间复杂度:\(O(N)\)

最新文章

  1. Excel中VBA进行插入列、格式化、排序
  2. 解决Java接口内部类的main()方法无法打印输出的问题
  3. getResourceAsStream和getResource的用法及Demo实例
  4. 记一个界面刷新相关的Bug
  5. Creating a ZIP Archive in Memory Using System.IO.Compression
  6. windows下快速启动 nginx 和 php-cgi 的两个批处理
  7. 2.opencv图像处理常用操作
  8. 安装nging,php
  9. Apache + Tomcat + mod_jk实现集群服务及session共享
  10. [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
  11. python基础之元组(Tuple)、字典(Dictionary)详解
  12. Java NIO 和 IO 的区别详解
  13. Android图表库MPAndroidChart(九)——神神秘秘的散点图
  14. centos7 firewalld 开放端口
  15. 折线图hellocharts的使用说明
  16. SOD框架的Model、连接数据库及增删改查
  17. Trie树详解(转)
  18. topcoder srm 330 div1
  19. PHP的异常以及异常存在的意义
  20. SQL Server 2016 -&gt;&gt; T-SQL新特性

热门文章

  1. Kafka 3.0新特性
  2. Rabbit 高级操作
  3. AtCoder Beginner Contest 221 A~E题解
  4. UE4技术总结——委托
  5. HTTP基础系列之:一文搞懂URL
  6. spoj839 Optimal Marks(最小割,dinic)
  7. 【Java虚拟机1】Java字节码文件格式入门
  8. 天脉2(ACoreOS653)操作系统学习01
  9. 【UE4】 补丁Patch 与 DLC
  10. QEvent