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

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

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.

提示:

各函数的调用总次数不超过 20000 次

思路:

定义一个辅助栈,最小的永远是栈顶,加入正常栈的时候维护这个辅助栈

  • 加入:
  • ①如果辅助栈为空就直接加入||如果辅助栈顶元素大于现在要加入的元素就加入辅助栈
  • ②无论何时,A都是正常的栈,正常入栈
  • 出栈:
  • 如果正常出栈的元素是辅助栈的栈顶,辅助栈也弹出
  • min:
  • 辅助栈的栈顶就是最小的

知识点

peek与poop
Stack.peek() 返回栈顶元素。
Stack.pop() 返回栈顶元素,并在栈中删除它。

Integer.equals()与“==”

注意这里的代码的pop()处如果用"=="取代equals就会出错,这是因为:

  1. “==”两边都是包装类型时,会直接比较引用地址(IntegerCache除外);两边都是基本类型比较值;两边是不同类型就自动拆箱。
  2. equals不能比较基本类型,比较包装类型会先比较是否为同类型,之后比较值是否相同;参数为值类型会自动装箱成包装类型。
  3. JAVA的Integer有IntegerCache,他会缓存[-128-127]之间的对象,也就是说新创建的对象的值在[-128-127]之间会检查是否有已存在的[-128~127],如果有就直接调用,否则才会产生新对象。
  4. 也就是说,如果连续新建两个相同值的Integer,如果值的大小在[-128~127],他们两个用"=="就是相等的,如果在这个范围之外,他们就不是同一个地址,就是不同的。

==和equals的不同:https://www.cnblogs.com/mrhgw/p/10449391.html

import java.util.Stack;/*** 包含min函数的栈* 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。* 思路:定义一个辅助栈,最小的永远是栈顶,加入正常栈的时候维护这个辅助栈* 加入:* ①如果辅助栈为空就直接加入||如果辅助栈顶元素大于现在要加入的元素就加入辅助栈* ②无论何时,A都是正常的栈,正常入栈* 出栈:* 如果正常出栈的元素是辅助栈的栈顶,辅助栈也弹出* min:* 辅助栈的栈顶就是最小的*/
class MinStack {Stack<Integer> A,B;/** initialize your data structure here. */public MinStack() {A=new Stack<>();B=new Stack<>();}//入栈public void push(int x) {A.push(x);//A是正常栈,都正常加入if (B.empty()||B.peek()>=x){//B是辅助栈,存储最小值B.push(x);}}public void pop() {//如果当前最小值是B的栈顶,A和B栈都同时出栈if (A.pop().equals(B.peek())){B.pop();}}public int top() {return A.peek();}public int min() {return B.peek();}
}

LeetCode剑指offer算法备战春招-包含min函数的栈相关推荐

  1. 剑指offer——面试题21:包含min函数的栈

    剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...

  2. 剑指offer:面试题30. 包含min函数的栈

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

  3. 牛客网(剑指offer) 第二十题 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. <?php $arr = array(); function mypush($node) {// write c ...

  4. [剑指offer]面试题21:包含min函数的栈

    面试题21:包含min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 栈内压入3.4.2.1之 ...

  5. 剑指offer_第20题_包含min函数的栈_Python

    题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数.时间复杂度应为O(1) 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution:def __i ...

  6. 剑指offer系列-30.包含min函数的栈

    剑指offer系列第30题.包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中, 调用 min.push 及 pop 的时间复杂度都是 ...

  7. 【LeetCode 剑指offer 刷题笔记】汇总(已完成)

    前言   不知不觉就结束了自己的秋招之路,虽感觉有些艰辛但是收获很多.找工作那段时间做了很多学习笔记,这是数据结构与算法相关的一部分笔记,这一块除了复习相关教科书,还有就是刷LeetCode和< ...

  8. leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer

    题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...

  9. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

最新文章

  1. 简单探讨隐私增强技术的类型和用途
  2. 报名 | 面向智慧城市的人本尺度城市形态:理论、方法与实践讲座
  3. 紧急通知!最新版CleanMyMac X月底倒计时清仓冲量!
  4. 将图片处理成圆形_如何把图片批量处理成指定/固定的文件大小/体积以内?
  5. ubuntu安装mysql没反应_Ubuntu安装mysql三种安装方式
  6. Qt引用Boost问题
  7. QQ for Linux 安装和卸载
  8. WINDOWS自带md5校验工具
  9. 【4K录屏】高清录屏及剪辑软件:Bandicam 和 Captura
  10. 03 - Linux下安装软件的三种方式
  11. 小米8探索版线刷兼救砖_解账户锁_纯净刷机包_教程
  12. 腾讯云 mysql 远程_腾讯云服务器 MySQL 远程连接设置
  13. 百度数据挖掘实习生面试经验
  14. AAAI 2020:北大开源算法姿态辅助多摄像机协作以进行主动对象跟踪
  15. linux编程 —— shell编程脚本常用语法总结 【学习笔记】
  16. 三级公立医院绩效考核操作手册
  17. Scrapy 爬取起点中文网存储到 MySQL 数据库(自定义 middleware)
  18. 蓝桥杯练习题:计算保留100位小数的圆周率
  19. 怎么修改mysql的默认端口号
  20. 哲理故事与管理之道(18)-跳起来够得着的目标才算完美

热门文章

  1. 业余选手常见的技术缺陷及解决方法(下)
  2. QQ浏览器查看Cookies
  3. 压力传感器与51单片机C语言程序,51单片机压力传感器.docx
  4. 计算机php什么意思,pc什么意思
  5. 养兔场 网站上的个人介绍
  6. 2021-09-22 小米通信软开二面
  7. 小蚁智能摄像机服务器故障,小蚁智能摄像机app怎么和摄像头连接
  8. Sleep(0)的妙用
  9. hihoCoder - 1272 买零食
  10. IOS学习笔记56-IOS7状态栏适配方法一