剑指offer-面试题21.包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
在该栈中,调用min,push及pop的时间复杂度都是O(1).
这一题实际上需要一个辅助栈存储最小值:
1.在模板类定义两个栈类型私有成员变量,一个为保存数据的栈另外一个为保存最小值的栈
2.当栈为空的时候直接将数据同时压入数据栈和最小值栈
3.当栈不为空的时候,将数据先压入数据栈同时比较该数据和最小值栈栈顶元素的大小
若大于最小值栈栈顶元素,则向最小值栈压入其栈顶元素,否则压入该数据到最小值栈
栈顶
4.当我们使用方法的时候直接取最小值的栈顶即为栈中的最小值
5.当我们要pop栈的时候应同时pop最小值栈的栈顶元素
代码实现如下:
MinStack.h
#ifndef _MINSTACK_H
#define _MINSTACK_H #include <stack>
using namespace std; template <typename T>
class StackWithMin
{
public:
void push(T data);
void pop();
T min();
private:
stack<T> DataStack;
stack<T> MinStack;
}; template <typename T> void StackWithMin<T>::push(T data)
{
DataStack.push(data);
if(MinStack.empty())
{
MinStack.push(data);
}
else
{
if(data>=MinStack.top())
{
MinStack.push(MinStack.top());
}
else
{
MinStack.push(data);
}
}
} template <typename T> void StackWithMin<T>::pop()
{
MinStack.pop();
DataStack.pop();
} template <typename T> T StackWithMin<T>::min()
{
if(!DataStack.empty())
{
return MinStack.top();
}
else
{
cout<<"不好意思栈空!"<<endl;
}
} #endif
测试函数:
#include "MinStack.h"
#include <iostream>
using namespace std; int main()
{
StackWithMin<int> MinStack;
cout<<"请输入依次压入栈的数据(0-exit): "<<endl;
int data;
while(data!=)
{
cin>>data;
if(data!=)
MinStack.push(data);
}
cout<<endl;
cout<<"栈的最小值为: "<<MinStack.min()<<endl;; return ;
}
运行截图:

剑指offer-面试题21.包含min函数的栈的更多相关文章
- 剑指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 - 九度1522 - 包含min函数的栈
剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...
- 剑指offer(20)包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...
- 剑指offer二十之包含min函数的栈
一.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.思路 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数.每次元素存入minSt ...
- 【剑指Offer】20、包含min函数的栈
题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路: 使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...
- 《剑指offer》面试题21 包含min函数的栈 Java版
(min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考 ...
- 《剑指offer》面试题21—包含min函数的栈
题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直 ...
- 题目21 包含Min函数的栈
///////////////////////////////////////////////////////////////////////////////////// // 3. 题目21 包含 ...
随机推荐
- HDU 5424 Rikka with Graph II
题目大意: 在 N 个点 N 条边组成的图中判断是否存在汉密尔顿路径. 思路:忽略重边与自回路,先判断是否连通,否则输出"NO",DFS搜索是否存在汉密尔顿路径. #include ...
- hdu 5427 A problem of sorting(字符排序)
Problem Description There are many people's name and birth in a list.Your task is to print the name ...
- Html 加载音乐代码mp3
<object data="__PUBLIC__/home/mp3/media.mp3" type="application/x-mplayer2" wi ...
- MSN在Win7下80072f0d错误解决
近期电脑(笔记本联想 K41A)显卡出了点问题(该显卡一周前刚换的新的,竟然不到一周又出问题了,联想的质量真的...),在xp下电脑根本进不了操作系统,不断重新启动(可能驱动.系统垃圾太多有关),于是 ...
- phpStudy + JspStudy 2014.10.02 下载
phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Teng ...
- [HeadFirst-HTMLCSS学习笔记][第十二章HTML5标记]
考虑HTML结构 HTML5即是把原来<div>换成一些更特定的元素.能够更明确指示包含什么内容. (页眉,导航,页脚,文章) article nav 导航 header footer t ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的解决方案
今天写了一个excel表的导入功能,结果在excel表中的内容导入到页面时报错:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT ...
- asp.net断点续传技术---下载(转)
断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求 ...
- java进程
package com.process; public class ProcessTest { public static void main(String[] args) { new Proce ...
- C#中Dispose、析构函数、close的区别
一.Close与Dispose这两种方法的区别 调用完了对象的Close方法后,此对象有可能被重新进行使用:而Dispose方法来说,此对象所占有的资源需要被标记为无用了,也就是此对象要被销毁,不能再 ...