面试经典-设计包含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 ...
随机推荐
- 【Eclipse】Failed to load JavaHL Library
1.选择window--->preferences->Team->SVN->SVN接口 2.选择SVNKit (Pure Java) xxxxxx 如下图所示 : 选择之后, ...
- 配置greenplum参数
在进行一个greenplum安装之前需要进行配置一下相关的系统参数,否则很容易出现意想不到的错误. 1.修改系统参数 编辑 /etc/sysctl.conf ,以下是最小配置 kernel.shmma ...
- Opencv2系列学习笔记2(图像的其它操作)
本节主要涉及到图像的领域.算术操作以及如何操作图像感兴趣的区域. 一:邻域操作 以下例子主要对图像进行锐化.基于拉普拉斯算子<后面讨论>.这幅图像的边缘部分将得到放大,细节部分将更加的锐利 ...
- win7 ShuipFCMS 配置 及问题
随风下载地址:http://www.shuipfcms.com/download.shtml 碰到问题: 一.mb_strlen 函数不支持 到php.ini 开启 ;extension=php ...
- go - 变量和常量
1.定义变量 goLang中定义变量的方式很多 先声明再使用:如果定义的变量未使用编译时会报错 a. /*定义单个变量*/ var varName type //定义一个 type 类型的变量 var ...
- fragment的切换
1.视图 1)主视图 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...
- 解析stm32的时钟
STM32 时钟系统 http://blog.chinaunix.net/uid-24219701-id-4081961.html STM32的时钟系统 *** http://www.cnblo ...
- 1076: [SCOI2008]奖励关( dp )
期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...
- JavaScript DOM省市自适配select菜单
<html> <head> <meta charset="UTF-8"> <meta name="Generator" ...
- Qt实现QQ好友下拉列表(用QListView实现,所以还得定义它的Model)
偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能: 1.可以删除列表中图标 2.可以像qq一样的,把某个分组下的图标转移到另外的分组 3.添加分组 ...