面试经典-设计包含min函数的栈
问题:设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
解答:push 和pop的时间复杂度都是O(1),这个很好理解,创建个栈即可。但是min的复杂度也是O(1),每次push,pop后,调用min的复杂度也得是O(1)。这就要求栈中的每个元素都要存一个每个元素到栈底元素的最小值,这样来实现min的时间复杂度O(1),只需返回栈顶元素存的最小值即可。
栈的实现代码如下:
struct MinStackElement
{
int data;
int min;
}; struct MinStack
{
MinStackElement *data;
int stackSize;
int top;
};
//初始化一个栈
void MinStackInit(int maxSize,MinStack &stack)
{
stack.data=new MinStackElement[maxSize];
stack.top=0;
stack.stackSize=maxSize;
}
//释放栈的空间
void freeStack(MinStack &stack)
{
delete []stack.data;
stack.data=NULL;
stack.top=0;
stack.stackSize=0;
} //压栈
void push(int value,MinStack &stack)
{
if(stack.top==stack.stackSize)
return; stack.data[stack.top].data=value; if(stack.top==0) stack.data[stack.top].min=value;//第一个元素当然就是最小值
else
stack.data[stack.top].min=value>stack.data[stack.top-1].min?stack.data[stack.top-1].min:value;//不是第个一元素最小值需要比较一下 stack.top++;
} int pop(MinStack &stack)
{ if(stack.top==0)
return -1; int t= stack.data[stack.top].data; stack.top--; return t;
} int min(MinStack stack)
{
if(stack.top==0)
return -1; return stack.data[stack.top-1].min;
}
测试代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
MinStack st1; MinStackInit(5,st1); push(5,st1); push(10,st1); push(1,st1); push(6,st1); push(0,st1); std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
std::cout<<min(st1);
pop(st1);
freeStack(st1); int j; std::cin>>j; return 0;
}
面试经典-设计包含min函数的栈的更多相关文章
- 【编程题目】设计包含 min 函数的栈
2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...
- 设计包含min()函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是去年google的一道面试题. 我看到这道题目时,第一反应 ...
- 无情面试官之包含min函数的栈
0 我是一个无情的面试官. 面人无数,挂人无数. 若想过我的面试,标准只有一个,那就是公司很缺人. 招新人,填旧坑. 1 今天是我的第1001次当面试官,要求却不是千里挑一,而是一击必中. 因为我招聘 ...
- MS - 2 - 设计包含 min 函数的栈
定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). template<typename T> st ...
- 2.设计包含 min 函数的栈[StackWithMinValue]
[题目]: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). [解法一]: 使用一个辅助栈来保存最小元素,其栈顶元素为当前栈 ...
- 设计包含min函数的栈
stack<pair<int, int>> sta; void push(int x) { int min_i; if(sta.empty()) { min_i = x; } ...
- 面试题之堆栈队列系列一:设计包含min函数的栈
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [算法编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
- 41. 包含min函数的栈
包含min函数的栈 描述 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 ...
- 剑指Offer面试题:19.包含Min函数的栈
一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...
随机推荐
- 打印NSLog分类 Foundation+Log.m
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @implementation UIView(Log) + ...
- BestCoder Round #50 (div.1) 1003 The mook jong (HDU OJ 5366) 规律递推
题目:Click here 题意:bestcoder 上面有中文题目 分析:令f[i]为最后一个木人桩摆放在i位置的方案,令s[i]为f[i]的前缀和.很容易就能想到f[i]=s[i-3]+1,s[i ...
- IP数据包结构
Linux 网络编程——IP 数据报格式详解 http://www.linuxidc.com/Linux/2015-04/116149.htm
- UIAlertView、UIActionSheet兼容iOS8
链接地址:http://blog.csdn.net/nextstudio/article/details/39959895?utm_source=tuicool 1.前言 iOS8新增了UIAlert ...
- Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介
原文 Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介 第17部分:Coding4Fun工具包简介 原文地址: http://channel9.msdn.com/ ...
- kingso_sort - Taocode
kingso_sort - Taocode 如何编写新sort 由于排序逻辑多种多样,kingso的排序设计成是由一个个排序对象串起的排序链条组成.排序对象之间可以任意组合(只需要改配置文件),就可以 ...
- Oracle 数据的导入和导出(SID service.msc)
一:版本号说明: (1)(Oracle11 32位系统)Oracle - OraDb11g_home1: (2)成功安装后显演示样例如以下:第一个图是管理工具.创建连接.创建表:第二个是数据库创建工 ...
- HDU 3336 Count the string KMP
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3336 如果你是ACMer,那么请点击看下 题意:求每一个的前缀在母串中出现次数的总和. AC代码: # ...
- pop,墨刀,快现、justinmind 、Axure
原型设计软件 墨刀:https://modao.cc Justinmind: http://www.zhihu.com/question/26662368/answer/33586218 http:/ ...
- 一些Xcode 5的使用提示和技巧
摘自:http://www.cocoachina.com/newbie/env/2014/0127/7766.html 感谢论坛成员郭亚鑫的热心翻译. 在iOS开发中,Xcode 是最使用最多的I ...