实现O(1)时间复杂度带有min和max 函数的栈
仅仅是演示实现。不考虑栈使用的数据结构是vector 还是其它容器。
代码例如以下
#include <iostream>
#include <vector> using namespace std; template <class T>
class minMaxStack
{
public:
minMaxStack()
{
DataStack = new vector<T>;
minStack = new vector<int>;
maxStack = new vector<int>;
}
~minMaxStack()
{
delete DataStack;
delete minStack;
delete maxStack;
}
bool isEmpty()
{
return DataStack->size() == 0;
}
void push(T data)
{ if (isEmpty())
{
DataStack->push_back(data);
minStack->push_back(0);
maxStack->push_back(0);
}
else
{
DataStack->push_back(data);
int minIndex = *(minStack->end()-1);
int maxIndex = *(maxStack->end()-1);
int min = *(DataStack->begin() + minIndex);
int max = *(DataStack->begin() + maxIndex);
if (min > data)
{
minStack->push_back(DataStack->size() - 1);
}
else
{
minStack->push_back(minIndex);
}
if (max > data)
{
maxStack->push_back(maxIndex);
}
else
{
maxStack->push_back(DataStack->size() - 1);
}
}
} T getTop()
{
return *(DataStack->end()-1);
}
void pop()
{
if (isEmpty())
{
return;
}
minStack->erase(minStack->end()-1);
maxStack->erase(maxStack->end()-1);
DataStack->erase(DataStack->end()-1);
}
T max()
{
return *(DataStack->begin() + (*(maxStack->end()-1)));
}
T min()
{
return *(DataStack->begin() + (*(minStack->end()-1)));
}
void printStack()
{
cout << "栈顶:" << getTop() << endl;
cout << "最小:" << min() << endl;
cout << "最大:" << max() << endl;
cout << "\n\n";
}
private:
vector<T> * DataStack;
vector<int> * minStack;
vector<int> * maxStack;
}; void main()
{
minMaxStack<int> st;
st.push(6);
st.printStack();
st.push(17);
st.printStack();
st.push(7);
st.printStack();
st.push(3);
st.printStack();
st.pop();
st.printStack();
st.pop();
st.printStack();
st.pop();
st.printStack();
cin.get();
}
实现O(1)时间复杂度带有min和max 函数的栈的更多相关文章
- Oracle的dbms_random.value(min,max)函数包括边界值吗?数据是如何分布的?
事先申明下,我的DB环境是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,不保证在其它版本下也 ...
- Visual C++中min()和max()函数的使用
标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max().通常用它可以计算某个值对的最小值和最大值. 可惜在 Visual C++ 无法使用它们, ...
- SAS学习笔记6 算数语句(sum、mean、min、max函数)
sum:求和 mean:平均值 min:最小值 max:最大值
- mysql中min和max查询优化
mysql max() 函数的需扫描where条件过滤后的所有行: 在测试环境中重现: 测试版本:Server version: 5.1.58-log MySQL Community ...
- 面试题19:包含min函数的栈
CStack.h: #pragma once class CStackElement { public: CStackElement(void){} CStackElement(int data, i ...
- 三、函数 (SUM、MIN、MAX、COUNT、AVG)
第八章 使用数据处理函数 8.1 函数 SQL支持利用函数来处理数据.函数一般是在数据上执行的,给数据的转换和处理提供了方便. 每一个DBMS都有特定的函数.只有少数几个函数被所有主要的DBMS等同的 ...
- oracle max()函数和min()函数
当需要了解一列中的最大值时,可以使用MAX()函数:同样,当需要了解一列中的最小值时,可以使用MIN()函数.语法如下. SELECT MAX (column_name) / MIN ...
- Linq查询Count、Sum、Min、Max、Average
原文地址:Linq——Count.Sum.Min.Max.Average作者:mousekitty Linq查询之Count.Sum.Min.Max.Average using System; usi ...
- Min and Max
Min and Max 需要处理不同数据类型; 另外*args, 表示的是位置参数, *kwargs表示的是key参数, args的类型为tuple类型, 参数为min(3, 2)时, args为(3 ...
随机推荐
- SGU 170.Particles
Solution: 这其实是道很简单的题. 只要从一端开始,以‘+’或‘-’,任意一种开始找,找到与目标串最近的相同字符的距离就是需要交换的次数 ...
- 页面加载完成,但ie进度条一直加载
页面ajax执行完删除等操作,会刷新当前页面,如果前端框架是左右iframe格式 我的前端页面提示用asyncBox,可能iframe和asyncBox的影响,出现这种情况: 网上大多数的说法是 页面 ...
- PHP通过链接获取二进制数据的方法
function urltoblob($url){ $data = @file_get_contents($url); //如果file得不到数据,则给空值 if(!$data){ $data = & ...
- [r]Setting up Django and your web server with uWSGI and nginx
Setting up Django and your web server with uWSGI and nginx This tutorial is aimed at the Django user ...
- 使用JAVA客户端对HDFS进行代码编写(五)
在linux中,在JAVA中编程,耗时的不是代码的编写而是环境的搭建,版本的选择...日了苍天,昨天eclipse突然抽风在linux运行不起来,耗了几个小时,试了各种办法...现在windows环境 ...
- Java中的那些名词术语(不断更新中)
在工作和学习中,总会遇到各种术语.岁月不饶人,记忆力越来越下降.在这里记录下那些曾经关注过学习过的东西. POJO: Plain Old Java Object DI: Dependency Inje ...
- 【Unity探究】物理碰撞实验
这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就是物理碰撞.以前没有好好研究过,一直模糊不清,到底什么条件下才可以产生物理碰撞呢?只要其中一个有Rigidbody就可以了吗?所以进 ...
- Tunnel Warfare
hdu1540:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:给你一列村庄,每个村庄给一个标号,1--n,然后毁掉一些村庄,或者重建几个村庄,重建 ...
- 要开始深入VMM了。
得到一个VMM机器所有的节点状态 Quick one-liner to generate a CSV of virtual machines, sorted by their hosts. Repor ...
- 两个在线编写C++代码的网站
第一个支持的编程语言很多,首推 http://ideone.com/ 第二个简单了点,不过可以通过email分享给朋友 http://codepad.org/ 试一试,可以用这两个网站提高自己编写代码 ...