题目21 包含Min函数的栈
/////////////////////////////////////////////////////////////////////////////////////
// 3. 题目21 包含Min函数的栈
template <typename TYPE>
class CMinInStack
{
public:
void Push(const TYPE& value);
const TYPE Pop();
const TYPE& GetMinValue() const; private:
stack<TYPE> m_stDataStack;
stack<TYPE> m_stMinStack;
}; template <typename TYPE>
const TYPE& CMinInStack<TYPE>::GetMinValue() const
{
assert(!m_stDataStack.empty() && !m_stMinStack.empty()); return m_stMinStack.top();
} template <typename TYPE>
const TYPE CMinInStack<TYPE>::Pop()
{
assert(!m_stDataStack.empty() && !m_stMinStack.empty()); TYPE value = m_stDataStack.top();
m_stDataStack.pop();
m_stMinStack.pop(); return value;
} template <typename TYPE>
void CMinInStack<TYPE>::Push(const TYPE& value)
{
// 1.向栈中添加元素
m_stDataStack.push(value); // 2.往辅助栈中添加最小元素
if (m_stMinStack.empty() || value < m_stMinStack.top())
{
m_stMinStack.push(value);
}
else
{
m_stMinStack.push(m_stMinStack.top());
}
} void MinInStackTestFunc()
{
cout << "\n\n --------------- MinInStackTestFunc Start -------------->" << endl; int aiArray[] = {3, 4, 5, 8, 9, 1, 4, 45, 89};
int iLen = sizeof(aiArray) / sizeof(int);
TRAVERSAL_ARRAY(aiArray, iLen); CMinInStack<int> stMinStack; for (int i = 0; i < iLen; i++)
{
stMinStack.Push(aiArray[i]);
} printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); cout << "\n\n --------------- MinInStackTestFunc End -------------->" << endl; }
题目21 包含Min函数的栈的更多相关文章
- 【算法题目】包含min函数的栈
题目来源:<剑指offer>面试题21 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push以及pop的时间复杂度都是O(1). 分 ...
- 剑指Offer:面试题21——包含min函数的栈(java实现)
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...
- 剑指offer-面试题21.包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...
- 《剑指offer》面试题21—包含min函数的栈
题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直 ...
- 《剑指offer》面试题21 包含min函数的栈 Java版
(min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考 ...
- 21 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. C++: class Solution { private: stack<int> dataStack ; stac ...
- 剑指Offer面试题:19.包含Min函数的栈
一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...
- 栈二:包含min函数的栈
/** * 题目:包含min函数的栈 * 描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. * 注:用data来保存数据,用另一个栈min保存依次入栈最小的数 * ...
- 【编程题目】设计包含 min 函数的栈
2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...
随机推荐
- dbcp_c3p0连接mysql8.0.13
背景 学习数据库的使用,上次没有记录,现在都回忆不起来了,所以这次重新学的时候顺便记录下. 配置环境 win10 jdk11 idea mysql8.0.13 DBCP连接使用 用配置文件目前我连接不 ...
- ansible handlers
示例:安装nginx --- - hosts: hadoop #指定主机组 remote_user: root #远程执行命令的用户 gather_facts: no #是否获取远程主机的信息 tas ...
- vue中的父组件传值给子组件
以上父组件以及父组件里面的代码 下面是子组件以及里面的代码
- idea创建Web项目(基于Maven多模块)
简述:通常我们开发的项目结构是由多个modules项目组合而成,并且由有个parent的maven项目整体管理.废话少说,直接进入创建过程. 创建parent项目 1.打开idea工具,按照下图操作, ...
- 运维管理SLA
主要三个概念: SLI 服务关键量化指标,即测试哪些指标,如何测等 SLO :服务等级目标,即要达到哪些目标,如设备正常率3个9.4个9等,即99.9% SLA: 服务等级协议,即如果未完成SLO中 ...
- 在IntelliJ IDEA中启动tomcat出现Can't load AMD 64-bit .dll on a IA 32-bit' platform问题详解
第一查看jdk版本 第二查看IntelliJ IDEA中运行tomcat的配置的jdk 比较两个jdk版本是否一致.或者查看tomcat是64还是32位的
- LC 990. Satisfiability of Equality Equations
Given an array equations of strings that represent relationships between variables, each string equa ...
- fileBeat的简单使用
Beat的简单使用 Filebeat配置 Output 常见日志格式封装 简单使用filebeat格式化nginx日志 Filebeat的配置: # 修改filebeat.yml # vim file ...
- java数据类型,取值范围,引用类型解析
与javascript不同,Java是强类型语言,在定义变量前需要声明数据类型.主要分两种数据类型:基本数据类型和引用数据类型. 1.基本数据类型分析: 基本数据类型 数值型 整数型 byte字节 ...
- QML异常:Cannot anchor to an item that isn't a parent or sibling
翻译: 无法定位到不是父项或同级项的项 QML的anchor必须定位父级对象或者同级对象,不能定位到其他如:同级对象的子对象