问题描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

解题思路

笔试时,能通过为大。如果能使用 Java 库中的数据数据和方法就尽量使用。

思路:对 Stack 的原有方法进行封装,数据存入栈 data之中,并借助一个辅助栈 min 来存放最小值。

入栈时,data 栈正常入栈;然后将 node 与 min栈的栈顶元素比较大小,如果 min 栈顶为空或者 node 较小就入辅助栈 min ,否则不如 min 栈。

出栈时,min 的栈顶元素若与栈data 的栈顶元素一样,则栈min 也需要出栈;否则栈min 不执行出栈。

Java 代码

import java.util.Stack;public class Solution {private Stack<Integer> data = new Stack<>();private Stack<Integer> min = new Stack<>();public void push(int node) {data.push(node);if (min.isEmpty() || node < min.peek()) {min.push(node);}}public void pop() {if (data.peek() == min.peek()) {data.pop();min.pop();} else {data.pop();}}public int top() {return data.peek();}public int min() {return min.peek();}
}

复杂度分析:

  • 时间复杂度:O(1) --> 因为直接使用了栈的数据结构,出栈入栈的时间复杂度为 O(1)

剑指Offer:包含main函数的栈(借助辅助栈)相关推荐

  1. 剑指offer 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 先介绍一下java.util.Stack.peek()方法实例: 下面的例子显示java.util.Stack.pee ...

  2. python剑指offer 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution:def _ ...

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

    时间限制:1秒 空间限制:32768K 热度指数:158697 本题知识点: 栈 算法知识视频讲解 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 给出代码: cla ...

  4. 剑指offer——面试题7:用两个栈实现队列

    剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...

  5. 《剑指offer》Partition函数及其Partition函数周边

      Partion函数最早出现于快速排序算法,但其代表的分治思想,在<剑指offer>这本书中求数组中位数(面试题39,数组中出现次数超过一半的数字)中也有所涉及,将其汇总在一起,称之为P ...

  6. 剑指offer-JZ30 包含min函数的栈(C++,附自己的分析)

    描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop.top 和 min 函数操作时,栈中一定有元素. 此栈包含的方法有: push(value ...

  7. 《剑指offer》第九题(用两个栈实现队列)

    // 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...

  8. 剑指offer:面试题09. 用两个栈实现队列

    题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...

  9. [剑指offer]面试题7:用两个栈实现队列

    面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...

最新文章

  1. C++ socket编程
  2. 【数据平台】sqoop支持hive和mysql互导的基本语句格式
  3. android:descendantFocusability
  4. IT项目管理需要注意的细节
  5. 【JLOI2013】地形生成
  6. vs2010设置编辑器背景颜色
  7. 上海音乐学院计算机考研难吗,上海音乐学院考研难吗?一般要什么水平才可以进入?...
  8. Kafka : kafka查询某时间段内的消息
  9. mysql (mariadb)数据库使用 mysqldump 备份全部数据库,并自动按当前时间名保存文件
  10. linux文件夹可视化工具,4款简单实用的的服务器文件管理工具推荐
  11. 招商银行一网通H5接口调试和测试报告撰写注意事项
  12. AI技术内参021-SIGIR2018论文精读:如何对搜索页面上的点击行为进行序列建模?
  13. Linux Mint TLP设置
  14. json在java代码混淆出问题_代码混淆 GSON完满解决
  15. Unity入门--Unity的下载安装及基本使用
  16. 汝之蜜糖,吾之砒霜— 聊聊软件开发中的最佳实践
  17. mysql against无法搜索出结果_在搜索少于4个字符的字符串时,MATCH AGAINST在MySQL中不显示记录...
  18. UML之教学管理系统——3、Rational Rose画顺序图
  19. 01500105_MLDN-魔乐科技-李兴华【Java核心技术】_JDBC连接Oracle数据库
  20. 内容全面的企业网站策划书

热门文章

  1. 苏格拉底的oracle,苏格拉底的五个经典故事
  2. javascript二维数组转置_VBA数组拆分及维数的转换
  3. python open ascii codec cant_解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误...
  4. html元素和属性,HTML常用元素和属性(一)
  5. RxJava系列4(过滤操作符)
  6. 先验概率,后验概率,最大似然估计,最大后验概率
  7. 在想要放弃的时候想想是什么在支撑着你走到了这一步。
  8. Android笔记之FragmentTabHost实现选项卡
  9. Android 系统搜索框(有浏览记录)
  10. 2013多校训练赛第三场 总结