minStack实现
设计包含 min 函数的栈(栈)
定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。
要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
#include <algorithm>
#include <iostream>
#include <exception>
#include <string> class illegalParameterValue
{
public:
illegalParameterValue():errorMessage("Illegal parameter value"){}
illegalParameterValue(const char* theMessage){ errorMessage = theMessage;}
std::string errorMessage;
}; template<typename T>
struct minStackElement{
T element;
T min;
}; template<typename T>
class minStack{
private:
int top;
int size;
minStackElement<T>* arrayStack;
public:
minStack(int initCapacity)
{
try{
if(initCapacity < )
throw illegalParameterValue("initCapacity must greater than 0");
}catch(illegalParameterValue& e){
std::cout << "initCapacity has been made to be 1" << std::endl;
initCapacity = ;
}
arrayStack = new minStackElement<T>[initCapacity];
size = initCapacity;
top = -;
}
~minStack()
{
delete [] arrayStack;
}
void push(T x)
{
minStackElement<T> e;
e.element = x;
if(top == -){
e.min = x;
}else if(x < arrayStack[top].min){
e.min = x;
}else{
e.min = arrayStack[top].min;
}
if(top == size-)
{
minStackElement<T>* temp = arrayStack;
arrayStack = new minStackElement<T>[*size];
std::copy(temp,temp+size-,arrayStack);
delete [] temp;
}
arrayStack[++top] = e;
} void pop()
{
if(top == -)
throw illegalParameterValue("the stack is empty");
top--;
} T min()
{
return arrayStack[top].min;
}
};
minStack实现的更多相关文章
- LintCode MinStack
Implement a stack with min() function, which will return the smallest number in the stack. It should ...
- MinStack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- leetcode算法学习----155. 最小栈(MinStack )
下面题目是LeetCode算法155题: https://leetcode.com/problems/min-stack/ 题目1:最小函数min()栈 设计一个支持 push,pop,top 操作, ...
- [LeetCode] 155. minStack 设计最小栈
注意:getMin()时间复杂度为O(1) 最原始的方法: class MinStack(object): def __init__(self): """ initial ...
- [LeetCode] Min Stack 最小栈
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- BUG-FREE-For Dream
一直直到bug-free.不能错任何一点. 思路不清晰:刷两天. 做错了,刷一天. 直到bug-free.高亮,标红. 185,OA(YAMAXUN)--- (1) findFirstDuplicat ...
- 二刷Cracking the Coding Interview(CC150第五版)
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...
- (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
随机推荐
- SQLServer中数据加密方法
对SQLServer中的数据进行加密,有三种方法, 1. 在程序语言中先对数据进行加密后再把加密后的数据保存在SQLServer数据库中: 2. 利用SQLServer未公开的加密密码函数,在SQ ...
- 对SIP摘要认证方案的理解
一.口令认证常见机制 基于口令认证的系统一般有以下几种口令验证方式: 1.客户端以明文形式将用户名密码通过网络发送到服务器,服务器与已经保存在服务端的用户名密码进行比较,一致则通过验证: HTTP基本 ...
- js如何给当前日期+1?
一天=24小时=1440分钟=86400秒 所以给当前日期加一天的步骤为: 1.获取当前日期: 2.利用86400秒给其进行加一天操作: 3.类似加一天,两天,一月,一年等,过程如此. 代码如下(以j ...
- vue + echarts画圈圈
<div class="chart-bar-left" id= "chartbar-left" style="margin-top:1%;&qu ...
- .net使用QQ邮箱发送邮件
/// <summary> /// 发送邮件 /// </summary> /// <param name="mailTo">要发送的邮箱< ...
- MVC ViewData与ViewBag的区别
一.ViewData 1.ViewData派生自ViewDataDictionary,所以它具有字典的属性,例如:ContainsKey .Add .Remove 和 Clear : 2.字典键值是字 ...
- WCF快速上手(二)
服务端是CS程序,客户端(调用者)是BS程序 一.代码结构: 二.服务接口Contract和实体类Domain INoticeService: using Domain; using System; ...
- 和我一起学python
近来python越来越火,很多人都出了教程,我也来出一个凑凑热闹吧. pycharm激活 http://idea.lanyus.com/ https://blog.csdn.net/u01404481 ...
- httpclient org.apache.http.NoHttpResponseException: host:端口 failed to respond 错误原因和解决方法
原因:httpclient 之前与服务端建立的链接已经失效(例如:tomcat 默认的keep-alive timeout :20s),再次从连接池拿该失效链接进行请求时,就会保存. 解决方法:官方链 ...
- 安装 luajit && 给 luajit 安装 cjson
安装 luajit 步骤: 从官网 http://luajit.org/download.html下载 LuaJIT-2.0.5.tar.gz 解压 tar -xzf LuaJIT-2.0.5.ta ...