LeetCode剑指offer算法备战春招-包含min函数的栈
剑指 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就会出错,这是因为:
- “==”两边都是包装类型时,会直接比较引用地址(IntegerCache除外);两边都是基本类型比较值;两边是不同类型就自动拆箱。
- equals不能比较基本类型,比较包装类型会先比较是否为同类型,之后比较值是否相同;参数为值类型会自动装箱成包装类型。
- JAVA的Integer有IntegerCache,他会缓存[-128-127]之间的对象,也就是说新创建的对象的值在[-128-127]之间会检查是否有已存在的[-128~127],如果有就直接调用,否则才会产生新对象。
- 也就是说,如果连续新建两个相同值的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函数的栈相关推荐
- 剑指offer——面试题21:包含min函数的栈
剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...
- 剑指offer:面试题30. 包含min函数的栈
题目:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). MinStack min ...
- 牛客网(剑指offer) 第二十题 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. <?php $arr = array(); function mypush($node) {// write c ...
- [剑指offer]面试题21:包含min函数的栈
面试题21:包含min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 栈内压入3.4.2.1之 ...
- 剑指offer_第20题_包含min函数的栈_Python
题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数.时间复杂度应为O(1) 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution:def __i ...
- 剑指offer系列-30.包含min函数的栈
剑指offer系列第30题.包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中, 调用 min.push 及 pop 的时间复杂度都是 ...
- 【LeetCode 剑指offer 刷题笔记】汇总(已完成)
前言 不知不觉就结束了自己的秋招之路,虽感觉有些艰辛但是收获很多.找工作那段时间做了很多学习笔记,这是数据结构与算法相关的一部分笔记,这一块除了复习相关教科书,还有就是刷LeetCode和< ...
- leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer
题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...
- leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...
最新文章
- 简单探讨隐私增强技术的类型和用途
- 报名 | 面向智慧城市的人本尺度城市形态:理论、方法与实践讲座
- 紧急通知!最新版CleanMyMac X月底倒计时清仓冲量!
- 将图片处理成圆形_如何把图片批量处理成指定/固定的文件大小/体积以内?
- ubuntu安装mysql没反应_Ubuntu安装mysql三种安装方式
- Qt引用Boost问题
- QQ for Linux 安装和卸载
- WINDOWS自带md5校验工具
- 【4K录屏】高清录屏及剪辑软件:Bandicam 和 Captura
- 03 - Linux下安装软件的三种方式
- 小米8探索版线刷兼救砖_解账户锁_纯净刷机包_教程
- 腾讯云 mysql 远程_腾讯云服务器 MySQL 远程连接设置
- 百度数据挖掘实习生面试经验
- AAAI 2020:北大开源算法姿态辅助多摄像机协作以进行主动对象跟踪
- linux编程 —— shell编程脚本常用语法总结 【学习笔记】
- 三级公立医院绩效考核操作手册
- Scrapy 爬取起点中文网存储到 MySQL 数据库(自定义 middleware)
- 蓝桥杯练习题:计算保留100位小数的圆周率
- 怎么修改mysql的默认端口号
- 哲理故事与管理之道(18)-跳起来够得着的目标才算完美