min函数 辅助栈 c 语言,【剑指Offer】20、包含min函数的栈

题目描述:

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

解题思路:

解法一:使用两个stack,一个为数据栈,另一个为辅助栈。数据栈用于存储所有数据,每次压栈的最小元素(之前的最小元素和新压入栈中的元素,二者的较小值)保存起来放入辅助栈。

解法二:最小元素每一次都进栈,会有重复,也可以只有当进栈元素小于或等于之前的最小元素时,最小元素才进栈,而当弹出元素等于最小元素时,最小元素才出栈,从而节省一部分空间。

解法三:定义一个组合变量,比如Node,包括数据和最小元素两个成员变量,从而节省一个栈,但是本质仍然没有变。

举例:

241bf320dc65fc2ce48ce14a2ae725f7.png

编程实现(Java):

//解法一:

public class Solution {

/*

思路:需要一个辅助栈空间,对应保存当前数据栈的最小值

*/

Stack stack=new Stack<>();

Stack minStack = new Stack<>(); //辅助栈

public void push(int node) {

stack.push(node);

if(minStack.empty()) //将当前最小值存入辅助栈

minStack.push(node);

else

minStack.push(node > minStack.peek() ? minStack.peek(): node);

}

public void pop() { //两个都出栈

if(!stack.empty()){

stack.pop();

minStack.pop();

}

}

public int top() {

return stack.peek();

}

public int min() {

return minStack.peek();

}

}

//解法二:

class MinStack {

private Stack dataStack; //数据栈

private Stack minStack; //存放最小元素的栈

/** initialize your data structure here. */

public MinStack() {

dataStack=new Stack<>();

minStack=new Stack<>();

}

public void push(int x) {

if(minStack.isEmpty() || x<=minStack.peek())

minStack.push(x);

dataStack.push(x);

}

public void pop() {

if(!dataStack.isEmpty()){

int x=dataStack.pop();

if(x==minStack.peek())

minStack.pop();

}

}

public int top() {

return dataStack.peek();

}

public int getMin() {

return minStack.peek();

}

}

剑指Offer 20&period; 包含min函数的栈 (栈)

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 题目地址 https://www.nowcoder.com/practice/4c77 ...

&lbrack;剑指Offer&rsqb; 20&period;包含min函数的栈

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. [思路1]两个栈Stack和Min,Stack为当前栈中元素,Min为与Stack中元素一一对应的当前栈最小值. cl ...

《剑指offer》 包含min函数的栈

本题来自 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...

剑指 Offer 30&period; 包含min函数的栈 &plus; 双栈实现求解栈中的最小值

剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...

【Java】 剑指offer&lpar;30&rpar; 包含min函数的栈

本文参考自一书,代码采用Java语言. 更多:Java实现合集   题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...

Go语言实现:【剑指offer】包含min函数的栈

该题目来源于牛客网专题. 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数. 时间复杂度应为O(1). Go语言实现: var myList = ...

剑指OFFER之包含min函数的栈(九度OJ1522)

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

剑指offer:包含min函数的栈

题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路: 相当与在保留原栈的同时,去维护一个最小栈.利用一个辅助栈来完成.对于每个 ...

【剑指offer】包含min函数的栈

一.题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数. 二.思路: 无,Z(zhi)Z(zhang)式操作. 三.代码:

【剑指offer】包含min函数的栈,C&plus;&plus;实现

博客文章索引地址 博客文章中代码的github地址 1.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.在该栈中调用push.pop.top.min的时间复杂度都是o(1) ...

随机推荐

windows、ubuntu下eclipse搭建java、Python环境问题总结

前两篇博文分别讲述了如何在windows.ubuntu下用eclipse搭建java.python环境,下面就针对本人遇到的问题做一个总结. 一.windows下关于java环境变量JAVA_HOME ...

想让你的java代码更漂亮,用枚举吧

枚举是java 5之后添加的一个重要特性,这个特性不能提高性能,但是能让java程序员写出更优雅的代码. 我之前看到过挺多介绍java枚举的不错的帖子,我也来参与以下这个话题. 1. 枚举基本用法 / ...

python PIL except: IOError&colon; decoder jpeg not available

今天在Python运行环境的服务器弄一个有关图像处理的程序时报这样的错: 1 NameError: global name 'Image' is not defined import Image 了下 ...

iOS多线程的初步研究3

iOS多线程的初步研究(三) 弄清楚NSRunLoop确实需要花时间,这个类的概念和模式似乎是Apple的平台独有(iOS+MacOSX),很难彻底搞懂(iOS没开源,呜呜). 官网的解释是说run ...

Oracle查询和解锁表

一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...

APP的线程安全

一般来说iOS中两个就够了,但是安卓中的第三个,iOS也是要注意的: 第一:网络方面,别人以为做数据请求用post会比get请求安全,但是这是错的,post请求虽然看起来你的请求是在请求体上,不像ge ...

Zabbix实战-简易教程--通过公众平台企业号发送短信

一.注册企业号[体验号] 打开页面 http://qydev.weixin.qq.com/try?t=experience   (2016年注册的时候的连接)现在可能变了.进行注册操作,默认有90天的 ...

Mycat 分片规则详解--一致性hash分片

实现方式:基于hash算法的分片中,算法内部是把记录分片到一种叫做"bucket"(hash桶)的内部算法结构中的,然后hash桶与实际的分片节点一一对应,从此实现了分片.路由的功 ...

文件操作命令&lpar;rename&rpar;

Rename 命令: // 描述: 重命名文件或目录. // 语法: rename [:][]

Unit 6&period;标准文档流&comma;浮动&comma;清除浮动以及margin塌陷问题

一. 什么是标准文档流 文本流其实就是文档的读取和输出顺序,也就是我们通常看到的由左到右.由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值