力扣 - 剑指 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 = ...
随机推荐
- 这个 MySQL bug 让我大开眼界
这周收到一个 sentry 报警,如下 SQL 查询超时了. select * from order_info where uid = 5837661 order by id asc limit 1 ...
- Windows 10 64位操作系统 下安装、启动测试python pycharm
一.下载python3.7.7安装包 1:详细下载安装版本可见官网:https://www.python.org/downloads/release/python-373/ 2:百度盘分享连接:htt ...
- mybatis if else if 条件判断SQL片段表达式取值和拼接
前言 最近在开发项目的时候涉及到复杂的动态条件查询,但是mybaits本身不支持if elseif类似的判断但是我们可以间接通过 chose when otherwise 去实现其中choose为一个 ...
- Python项目生成requirements.txt文件之pipreqs的使用
生成requirements.txt时使用pip freeze > requirements.txt会将环境下所有的安装包都进行生成,再进行安装的时候会全部安装很多没有的包.耗时耗力其实是不可取 ...
- SpringBoot之SpringSecurity权限注解在方法上进行权限认证多种方式
前言 Spring Security支持方法级别的权限控制.在此机制上,我们可以在任意层的任意方法上加入权限注解,加入注解的方法将自动被Spring Security保护起来,仅仅允许特定的用户访问, ...
- 1-基本建表sql语句
基本的建表语句的总结 --建表语法 CREATE TABLE 表名( --约束可以没有 列名1 数据类型 [约束], 列名2 数据类型 [约束], ......, [约束], ..... ); --该 ...
- Fastjson中getJSONObject()与getJSONArray()的使用
测试JSON串: { "package": { "List1": { "errorCode": "0", "e ...
- Go语言核心36讲(Go语言进阶技术三)--学习笔记
09 | 字典的操作和约束 至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天 ...
- SpringMVC、Spring、MyBatis整合(IDEA版)
1 环境准备 1.1 软件架构 JDK 1.8 Spring 4.x Mybatis 3.x Maven 3.x MySQL 5.7 1.2 创建数据库 创建数据库,数据库名ssm-demo,字符集u ...
- HTTP标签
系统的http状态码知识,我是在<图解http里学习的>. 状态码的职责是告知从服务器端返回的请求结果. 分类如下: 2XX --> 成功 200 OK(一般情况) 204 No C ...