问题:设计包含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函数的栈的更多相关文章

  1. 【编程题目】设计包含 min 函数的栈

    2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...

  2. 设计包含min()函数的栈

    题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是去年google的一道面试题. 我看到这道题目时,第一反应 ...

  3. 无情面试官之包含min函数的栈

    0 我是一个无情的面试官. 面人无数,挂人无数. 若想过我的面试,标准只有一个,那就是公司很缺人. 招新人,填旧坑. 1 今天是我的第1001次当面试官,要求却不是千里挑一,而是一击必中. 因为我招聘 ...

  4. MS - 2 - 设计包含 min 函数的栈

    定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). template<typename T> st ...

  5. 2.设计包含 min 函数的栈[StackWithMinValue]

    [题目]: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). [解法一]: 使用一个辅助栈来保存最小元素,其栈顶元素为当前栈 ...

  6. 设计包含min函数的栈

    stack<pair<int, int>> sta; void push(int x) { int min_i; if(sta.empty()) { min_i = x; } ...

  7. 面试题之堆栈队列系列一:设计包含min函数的栈

    编译环境 本系列文章所提供的算法均在以下环境下编译通过. [算法编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...

  8. 41. 包含min函数的栈

    包含min函数的栈 描述 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 ...

  9. 剑指Offer面试题:19.包含Min函数的栈

    一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...

随机推荐

  1. iOS MBProgressHUD 之带底板的加载提示

    文章来自:http://blog.csdn.net/ryantang03/article/details/7877120 MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单 ...

  2. Linux DM9000网卡驱动程序完全分析

    Linux DM9000网卡驱动程序完全分析http://blog.csdn.net/ypoflyer/article/details/6209922

  3. VS 2013--工程的创建,scanf报错,常用快捷键,行号设置

    一.创建一个工程(这里是C++,其他的一样的) 在vs页面上点击 文件-->新建-->项目: 会出现如下界面,自己改名字和存贮位置就可以了 确定,然后点击下一步: 这样就建好了一个工程,然 ...

  4. 树莓派安装ftp服务器

    在树莓派安装ftp服务器,可上载\下载文件 vsftpd是开源的轻量级的常用ftp服务器. 1,安装vsftpd服务器 (约400KB)sudo apt-get install vsftpd 2,启动 ...

  5. 由基于qml,c++的串口调试工具浅谈qml与c++混合编程

    最近在做一个基于sim900 的串口通信工具,基于qml和c++来实现. 首先,对于串口,qt有自带的QSerialPort,可以实现同步,和异步通信,qt creator也有自带的例子,本例子是从其 ...

  6. perl 使用use utf8

    jrhapt12:/home/tomcat> cat a1.pl use Encode; $phone='18072722237'; open (LOG1 ,"<",' ...

  7. 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别

    Activity.finish()Call this when your activity is done and should be closed. 在你的activity动作完成的时候,或者Act ...

  8. 一、Python-----之变量

    1.变量存在的意义就是在程序中存储一些临时的数据.2.程序运行的时候回调用变量的临时数据. 变量起名规则: 变量名只能是字符.数字或下划线的任意组合 变量名的第一个字符不能是数字 以下关键字不能声明为 ...

  9. Qt实现不同Treewidget之间拖拽

    拖拽是编程中经常要用到的,我这里主要是实习了Treewidget之间直接拖拽Item,按下Ctrl键的话是copy,不按Ctrl则是Move.以下是实现代码 class TreeItemMimeDat ...

  10. php Smarty模板引擎配置与测试

    Smarty简介 smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页 ...