《剑指offer》面试题21—包含min函数的栈
题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数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函数的栈的更多相关文章
- 剑指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函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...
- 题目21 包含Min函数的栈
///////////////////////////////////////////////////////////////////////////////////// // 3. 题目21 包含 ...
随机推荐
- python中的特殊用法
1 别名 from xxx import xxx as xxx;
- new 和 make 均是用于分配内存
the-way-to-go_ZH_CN/06.5.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...
- RaspBerry Pi3 ~ 内核编译
RaspBerryPi3-内核编译 转载注明出处:http://www.cnblogs.com/einstein-2014731/p/5985128.html 在有道云笔记的同步分享:http://n ...
- fragment静态加载
import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; / ...
- Vue-router进阶、单页面应用(SPA)带来的问题
一 . vue-router 进阶 回顾学过的vue-router,并参考官方文档学习嵌套路由等路由相关知识. 二 . 单页面应用(SPA)带来的问题 1 . 虽然单页面应用有优点 , 但是,如果后端 ...
- php远程下载文件
<?php /* 本源码来源于网络 http://user.qzone.qq.com/292672703 */ header("content-Type: text/html; cha ...
- touchweb手机网站图片加载方法(canvas加载和延迟加载)
一.canvas图片加载 关于canvas加载,我的方法是,将文章中所有用到图片的地方,都用canvas代替,给canvas一个data-src,里面存放img的路径,通过canvas方法渲染图片.因 ...
- POJ 2063 Investment (完全背包)
A - Investment Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Subm ...
- Cocos2d-x中定时器的使用
CCTimer:轻量级的计时器 CCTimer (void) ccTime getInterval (void) void setInterval (ccTime fInterval) bool ...
- BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题意: 有n个数a[i]从左到右排成一排. 你可以任意选数,但是连续的数不能超过k个 ...