一、题目描述

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

二、思路解析

  首先定义一个Integer类型的栈,记为stack,此栈用来完成数据正常的push()、pop()、top()和peek()等操作。
  然后定义一个Integer类型的栈,记为minStack(一定要理解清楚此栈的作用),此栈主要用来记录每一次stack进行push、pop、top和peek等操作后stack栈中的最小元素,所以stack的每一次push或者pop操作后,都需要对minStack进行更新处理,以保证minStack能够及时记录stack当前元素中的最小值(stack和minStack需要进行同步操作,也即stack有元素入栈时候,minStack也要入栈一个特殊的元素(以更新stack中新的最小值);stack出栈时候,minStack也要出栈(以更新记录stack中新的最小值))。简单说,minStack就是实时记录stack中最小元素值,为了保证实时记录的任务,minStack对于stack的push和pop操作需要作出相应的操作。

  1、stack入栈时候,minStack需要进行的操作

    (1)如果入栈元素node比minStack栈顶元素小(此处没有讨论stack为空的情况,如果stack为空,则stack和minStack都入栈node元素)
      则在stack入栈后,把入栈元素node也加入到minStack栈顶(保证minStack记录stack当前所有元素中的最小值)
    (2)如果入栈元素node比minStack栈顶元大
      此情况说明入栈node后stack中最小值没有变,最小值还是入栈前的最小值,所以node不应该加入到minStack的栈顶,但是minStack仍然需要入栈一个元素,这个元素的大小等于minStack的栈顶元素,如下代码中所示:“minStack.push(minStack.peek());”。这个比较容易忽略,其实只要想一想minStack的作用就很容易理解。

  2、stack出栈时候,minStack需要进行的操作

    stack出栈时,minStack也要出栈,以更新对stack最小值的记录。

  3、过程模拟

    (1)假设stack连续入栈元素为5,3,6,4,2,3,1,则minStack中先后入栈元素为5,3,3,3,2,2,1。
    (2)在(1)基础上,假设stack先后出栈1,3,2,则minStack先后出栈1,2,2。

三、java代码   

public class Solution {
Stack<Integer> stack = new Stack();
Stack<Integer> minStack = new Stack();

public void push(int node) {
if(stack.empty()){
stack.push(node);
minStack.push(node);
}else{
stack.push(node);
if(node < minStack.peek()){
minStack.push(node);
}else{
minStack.push(minStack.peek());
}
}
}

public void pop() {
stack.pop();
minStack.pop();
}

public int top() {
return stack.peek();
}

public int min() {
return minStack.peek();
}
}

以上均为个人理解,如果不正确、不合理或者可以优化的地方,欢迎下方留言。 

《剑指Offer》第20题(Java实现):定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。的更多相关文章

  1. 剑指offer 面试20题

    面试20题: 题目:表示数值的字符串 题:请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123 ...

  2. 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)

    面试 15:顺时针从外往里打印数字 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字.例如输入: {{1,2,3}, {4,5,6}, {7,8,9}} 则依次打印数字为 1.2.3. ...

  3. 剑指Offer第36题—Java版

    本题使用归并排序的思想,结合归并排序,写出的算法解. //数组中的逆序对 public static int InversePairs(int[] array){ if(array==null||ar ...

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

    1 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 2. 思路和方法 利用辅助栈来存储现有栈的最小值.在入栈和出栈的时候将现有栈和最小 ...

  5. 【剑指Offer】20、包含min函数的栈

      题目描述:   定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   解题思路:   使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...

  6. 《剑指offer》算法题第十二天

    今天是<剑指offer>算法题系列的最后一天了,但是这个系列并没有包括书上的所有题目,因为正如第一天所说,这些代码是在牛客网上写并且测试的,但是牛客网上并没有涵盖书上所有的题目. 今日题目 ...

  7. 《剑指offer》刷题目录

    <剑指offer>刷题目录 面试题03. 数组中重复的数字 面试题04. 二维数组中的查找 面试题05. 替换空格 面试题06. 从尾到头打印链表 面试题07. 重建二叉树 面试题09. ...

  8. 浅谈《剑指offer》原题:不使用条件、循环语句求1+2+……+n

    转载自:浅谈<剑指offer>原题:求1+2+--+n 如侵犯您的版权,请联系:windeal12@qq.com <剑指offer>上的一道原题,求1+2+--+n,要求不能使 ...

  9. 【剑指Offer面试编程题】题目1522:包含min函数的栈--九度OJ

    题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(1<=n&l ...

随机推荐

  1. YUV介绍

    YUV444与YUV422下采样. 一.YUV介绍 YUV有三个分量:Y(Luminance/Luma:亮度).U和V表示色差,体现的是图片的色彩信息.相对于RGB彩色空间,将亮度信息和色彩信息分离. ...

  2. Egret飞行模拟-开发记录02

    1.Egret异步加载资源制作loading界面 使用EUI,EXML组件制作loading界面时,需要皮肤主题资源加载控制.即default.thm.json配置文件. 下一篇专门记录这部分. 2. ...

  3. 思维导图工具XMind下载

    XMind 是一款非常实用的商业思维导图软件,全力打造易用.高效的可视化思维软件,强调软件的可扩展.跨平台.稳定性和性能,致力于使用先进的软件技术帮助用户真正意义上提高生产率.XMind 支持 在Wi ...

  4. JS面试Q&A(续2): Rest parameter,Arrow function 等

    rest parameter 和 Destructuring assignment. function fun1(...theArgs) { console.log(theArgs.length);} ...

  5. Flink安装部署

    官网:https://ci.apache.org/projects/flink/flink-docs-release-1.7/ops/deployment/cluster_setup.html cd ...

  6. 使用nexus3.x搭建maven私服

    前言 好久之前就想搭建maven仓库了,一直拖到了现在,也就是懒得动,现在终于是要付诸行动了.网上查了不少资料,好多博客都是关于2.x的搭建,我下载的是最新版的nexus,好多教程已经不能使用,以此记 ...

  7. js实现选中div内容并复制到剪切板

    function copyUrl () { var div = document.getElementById('xxxx'); if (document.body.createTextRange) ...

  8. python———day01

    一.变量命名规则: 1,要有描述性: 2,变量名只能以  下划线,数字,字母组成,不可以有特殊符号和空格: 3,不能以中文为变量名(规范): 4,不能以数字开头: 5,保留字符(即关键字:如print ...

  9. pgadmin连接 postgresql远程设置

    背景:通过yum默认方式将pgsql10安装在centos7, pgsql 的配置文件在:/var/lib/pgsql/10/data. 配置文件:postgresql.conf 和 pg_hba.c ...

  10. 在Centos7上安装wxPython4.0.4

    在linux上安装wxPython4.0.4时需要gtk+2.0,在安装wxPython4.0.4遇到以下错误. linux上是用pip安装wxPython4.0.4的,执行命令如下: pip ins ...