剑指offer二十之包含min函数的栈
一、题目
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
二、思路
用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数。每次元素存入minStack的时候,如果该元素比minStack的栈顶元素小,则存入minStack,否则用minStack栈顶元素代替该元素存入minStack。
比如dataStack中依次入栈的元素为:5, 4, 3, 8, 10, 11, 12, 1
则minStack依次入栈的元素为: 5, 4, 3, 3, 3, 3, 3, 1
三、代码
import java.util.Stack; /*
用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数。每次元素存入minStack的时候,如果该元素比minStack的栈顶元素小,则存入minStack,否则用minStack栈顶元素代替该元素存入minStack。
比如dataStack中依次入栈的元素为:5,4,3,8,10,11,12,1
则minStack依次入栈的元素为:5,4,3,3,3,3,3,1
*/
public class Solution {
Stack<Integer> dataStack = new Stack<Integer>(); //保存元素
Stack<Integer> minStack = new Stack<Integer>(); //保存最小元素 public void push(int value) {
dataStack.push(value); //元素入dataStack
if (minStack.isEmpty() || value < minStack.peek()) { //如果minStack为空,或者当前存入的元素小于minStack的栈顶元素,则把该元素存入minStack
minStack.push(value);
} else {
minStack.push(minStack.peek());//如果minStack不为空且当前存入的元素大于或者等于minStack的栈顶元素,则把minStack栈顶元素存入minStack
}
} public void pop() {
dataStack.pop();
minStack.pop();
} public int top() {
return dataStack.peek();
} public int min() {
return minStack.peek();
}
}
--------------------------------------------------------------------------------
参考链接:https://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49
剑指offer二十之包含min函数的栈的更多相关文章
- 剑指Offer - 九度1522 - 包含min函数的栈
剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...
- 剑指offer(20)包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...
- 【剑指Offer】20、包含min函数的栈
题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路: 使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...
- 剑指Offer:面试题21——包含min函数的栈(java实现)
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...
- 剑指offer面试题30.包含min函数的栈
一开始写的垃圾代码,push和pop都是O(N) class Solution { public: vector<int> vec; int min_val=INT_MAX,min_cnt ...
- 【Offer】[30] 【包含min函数的栈】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是0(1). ...
- 面试题三十:包含min函数的栈
定义一个栈的数据结构,请实现一个每次都能找到栈中的最小元素,要求时间复杂度O(1).意思就是说每次进栈出栈后,min函数总能在时间1的前提下找到.方法一:由于每次循序遍历栈的话时间复杂度为n,所以要想 ...
- 剑指offer二十二之从上往下打印二叉树
一.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 二.思路 二叉树的层次遍历,可以借助队列实现.具体思路详见注释. 三.代码 import java.util.ArrayList; i ...
- 剑指offer二十八之数组中出现次数超过一半的数字
一.题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
随机推荐
- Win7 MinGW环境测试SDL2.0.3
下载MinGW版的文件 http://www.libsdl.org/release/SDL2-devel-2.0.3-mingw.tar.gz 解压放到mysys下面 运行Makefile mysys ...
- Bootstrap Table 超多列 使用滚动条
overflow-x: scroll;横向滑动详细讲解 able显示滚动条,要先把table放到一个div中,控制div 属性overflow值为scroll <div style=" ...
- Unix传奇
转自 http://coolshell.cn/articles/2322.html 了解过去,我们才能知其然,更知所以然.总结过去,我们才会知道我们明天该如何去规划,该如何去走.在时间的滚轮中,许许多 ...
- 20169207《Linux内核原理与分析》第八周作业
本章的作业依旧包括两部分,1.阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第11,12章. 2.学习MOOC「Linux内核分析」第六讲「进程的 ...
- Hdu2389 Rain on your Parade (HK二分图最大匹配)
Rain on your Parade Problem Description You’re giving a party in the garden of your villa by the sea ...
- MyBatis高级篇之整合ehcache缓存框架
MyBatis高级篇之整合ehcache缓存框架 2017-09-01 0 Comments 1,671 Views 0 Times 一.前言 MyBatis为我们提供了Cache接口,也提供 ...
- 微信小程序-flex布局中align-items和align-self区别
首先看看菜鸟教程中关于align-items和align-self的定义 align-items:align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式.(对 ...
- ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
寄宿的作用是开启一个进程为Web API提供一个运行环境以解决持续监听.请求监听和响应回复,即将接收到的请求转换成HttpRequestMessage对象传入管道,并将管道生成并经过处理后的HttpR ...
- cocoaPods 最新系统上的安装和基本使用图文笔记
1>mac系统自带ruby环境,查看ruby版本信息:ruby -v 2>安装cocoapods:sudo gem install cocoapods 此方法在新版本系统上会报错,如图. ...
- 16位CRC校验_Delphi
unit Modbus_main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, G ...