题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min。要求push,min,pop时间都是O(1)。

思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素;min函数直接取辅助栈栈顶元素即可;有元素弹出时辅助栈元素也弹出,这样栈顶就是剩下的元素中的最小的了。

 #include <iostream>
#include <stack>
using namespace std; template<typename T>
class StackWithMin
{
public:
void Push(const T& element);
T Min();
void Pop(); private:
stack<T> stack_data;
stack<T> stack_min;
}; template<typename T> void StackWithMin<T>::Push(const T& element) //类后面的那个T太容易忘了。。
{
if(stack_data.empty())
{
stack_data.push(element);
stack_min.push(element);
}
else
{
stack_data.push(element);
T temp = stack_min.top();
if(element < temp)
stack_min.push(element);
else
stack_min.push(temp);
}
} template <typename T> T StackWithMin<T>::Min()
{
if(stack_data.empty()) //这里一开始忘记检查是否为空了!
{
cout<<"Empty Stack!"<<endl;
//return; 这里应该要assert一下
}
return stack_min.top();
} template <typename T> void StackWithMin<T>::Pop()
{
if(stack_data.empty()) //这里一开始忘记检查是否为空了!
{
cout<<"Empty Stack!"<<endl;
return;
}
stack_data.pop();
stack_min.pop();
} int main()
{
StackWithMin<int> s;
s.Push();
s.Push();
s.Push();
s.Push();
s.Push();
cout<<s.Min()<<endl;
s.Pop();
cout<<s.Min()<<endl;
s.Pop();
cout<<s.Min()<<endl;
s.Pop();
cout<<s.Min()<<endl;
s.Pop();
s.Push();
cout<<s.Min()<<endl;
s.Pop();
cout<<s.Min()<<endl;
s.Pop();
// cout<<s.Min()<<endl;
s.Pop();
s.Pop();
return ;
}

《剑指offer》面试题21—包含min函数的栈的更多相关文章

  1. 剑指Offer:面试题21——包含min函数的栈(java实现)

    问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...

  2. 剑指offer面试题30.包含min函数的栈

    一开始写的垃圾代码,push和pop都是O(N) class Solution { public: vector<int> vec; int min_val=INT_MAX,min_cnt ...

  3. 剑指Offer - 九度1522 - 包含min函数的栈

    剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...

  4. 剑指offer(20)包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...

  5. 剑指offer二十之包含min函数的栈

    一.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.思路 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数.每次元素存入minSt ...

  6. 【剑指Offer】20、包含min函数的栈

      题目描述:   定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   解题思路:   使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...

  7. 《剑指offer》面试题21 包含min函数的栈 Java版

    (min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考 ...

  8. 剑指offer-面试题21.包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...

  9. 题目21 包含Min函数的栈

    ///////////////////////////////////////////////////////////////////////////////////// // 3. 题目21  包含 ...

随机推荐

  1. 九度OJ 1020:最小长方形 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6019 解决:2849 题目描述:     给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在 ...

  2. 性能测试--Jmeter之wordpress示例

    Jmeter之wordpress示例 WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理 ...

  3. eclipse中 svn出现 E220000 解决办法

    这种情况,先试试修改svnserve.conf 中的 anon-access = none 然后重启eclipse   如果还是不行,还有可能是因为你修改了svn的配置链接后 跟他人的svn连接方式有 ...

  4. Flask:web表单

    客户端发送的所有通过POST发出的请求信息都可以通过request.form获取.但是如果我们要生成表单的HTML代码和验证提交的表单数据那么就需要采用另外的方法.Flask-WTF扩展可以把处理we ...

  5. linux-shell脚本命令之grep

    版权声明: https://blog.csdn.net/zdp072/article/details/26015611 [ grep简单介绍: ] grep是用来过滤含有特定字符的行, 能使用正則表達 ...

  6. Java for LeetCode 108 Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题 ...

  7. mac下编译FFmpeg-Android

    参考: [史上最傻瓜的]mac下编译FFmpeg-Android http://blog.csdn.net/ashqal/article/details/9381037

  8. UVA11077 Find the Permutations —— 置换、第一类斯特林数

    题目链接:https://vjudge.net/problem/UVA-11077 题意: 问n的全排列中多有少个至少需要交换k次才能变成{1,2,3……n}. 题解: 1.根据过程的互逆性,可直接求 ...

  9. Queue Explorer过期处理

    Queue Explorer是收费软件,用一段时间后会显示过期界面无法使用, 我们可以删除注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cogin\Queue ...

  10. 在Windows7 下 mingw32 开发环境中采用 glut3.7 学习 OpenGL

    2015年10月2日更新: 发现 freeglut 很好用兼容于 gut ,而且开源还在更新中.因此我觉得放弃以前的 glut 了,转而用 freeglut 了. 买了本<计算机图形学第4版&g ...