力扣 - 剑指 Offer 30. 包含min函数的栈
题目
思路1
- 使用一个辅助栈
min_stack,用来维护栈的最小的元素 - 每次添加元素入栈时候,
data_stack和min_stack都要同时维护 data_stack按照正常的栈压入和弹出顺序,但是min_stack栈不一样,因为要能获取当前栈的最小元素:- 如果栈是空的,直接入栈
- 如果栈不是空的,分两种情况:
- 待入栈的元素
x小于min_stack栈顶的元素,此时直接将x压入min_stack栈 - 待入栈的元素
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)\)
力扣 - 剑指 Offer 30. 包含min函数的栈的更多相关文章
- 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值
剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...
- 剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...
- 【Java】 剑指offer(30) 包含min函数的栈
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...
- 剑指offer——30包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 题解: 借助辅助栈,新的数据<=f辅助栈顶时,就压入辅助栈,这样,就能保证辅 ...
- 每日一题 - 剑指 Offer 30. 包含min函数的栈
题目信息 时间: 2019-06-24 题目链接:Leetcode tag:栈 难易程度:简单 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 m ...
- [剑指offer] 5. 用两个栈实现队列+[剑指offer]30. 包含min函数的栈(等同于leetcode155) +[剑指offer]31.栈的压入、弹出序列 (队列 栈)
c++里面stack,queue的pop都是没有返回值的, vector的pop_back()也没有返回值. 思路: 队列是先进先出 , 在stack2里逆序放置stack1的元素,然后stack2. ...
- 《剑指offer》 包含min函数的栈
本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...
- 【剑指Offer】包含min函数的栈 解题报告
[剑指Offer]包含min函数的栈 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b ...
- Go语言实现:【剑指offer】包含min函数的栈
该题目来源于牛客网<剑指offer>专题. 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数. 时间复杂度应为O(1). Go语言实现: var myList = ...
随机推荐
- jmeter5.2 性能测试 资源监控 JMeterPlugins1.4 ServerAgent2.2.1
一.性能工具的安装部署 1.下载JMeterPlugins-Standard-1.4.0.zip的安装包 2.解压JMeterPlugins-Standard-1.4.0.zip,将其中\lib\ex ...
- navicat导出DDL语句
工作中有的时候需要将某个库中的表.视图.函数.存储过程等创建语句导出,又不需要表中的数据. 方法一:需要拷贝的创建语句条数不多,可以选择直接拷贝DDL语句 方法二:使用Navicat的备份功能
- nginx 配置文件(支持thnkphp3.2~5)
server { listen 8080 ; server_name localhost; set $root /var/www/myweb; #listen 443 ssl; #ssl_certif ...
- 在反序列化数据的时候报错raise JSONDecodeError("Expecting value", s, err.value) from None json.decode
今天在爬取某网站数据内容适合,通过正则匹配拿到了需要的内容字符串,但是在反序列化的时候竟然报错,大概意思知道他不是json的期望值,那么我就会像是不是数据内有一些内容是由于编码的问题导致的呢?因为之前 ...
- EXP-00091 正在导出有问题的统计信息-处理方法
打开oracle的SQL Puls中的命令如下: 1.conn /as sysdba 登陆 2.shutdown immediate; 关闭数据库 3.startup mount 4. AL ...
- Kubernetes client-go Indexer / ThreadSafeStore 源码分析
Kubernetes client-go Indexer / ThreadSafeStore 源码分析 请阅读原文:原文地址 Contents 概述 Indexer 接口 ThreadSafe ...
- 缓冲区溢出利用与ShellCode编写
一.实验目的 熟悉编写shellCode的流程 掌握缓冲区溢出的利用 二.实验环境 系统环境:Windows环境 软件环境:C++ ,缓冲区溢出文件链接 三.实验原理 要实施一次有效的缓冲区溢出攻击, ...
- JVM学习笔记——栈区
栈区 Stack Area 栈是运行时的单位,堆是存储单位,栈解决程序的运行问题,即程序如何执行,如何处理数据. 每个线程在创建时都创建一个该线程私有的虚拟机栈,每个栈里有许多栈帧,一个栈帧对应一个 ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0在恩智浦MCUXpresso IDE下的使用
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...
- linux性能优化基础——iommu相关配置
此篇文档介绍了IOMMU相关的信息: https://blog.chaosjohn.com/Check-VT-D-or-IOMMU-under-Linux.html iommu和vt-d都是io半虚拟 ...