【剑指offer】包括min函数的栈
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26064213
剑指offer上的第21题,之前在Cracking the Coding interview上做过。思路參考这里,这次写了測试函数,在九度OJ上測试通过。
- 题目描写叙述:
-
定义栈的数据结构,请在该类型中实现一个可以得到栈最小元素的min函数。
- 输入:
-
输入可能包括多个測试例子。输入以EOF结束。
对于每一个測试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行。每行開始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。
- 输出:
-
相应每一个測试案例中的每一个操作。
若栈不为空,输出相应的栈中最小元素。否则。输出NULL。
- 例子输入:
-
7
s 3
s 4
s 2
s 1
o
o
s 0
- 例子输出:
-
3
3
2
1
2
3
0
AC代码:
/*
本程序採用数组模拟栈
*/
typedef int ElemType;
#define MAX 100000 //栈的深度
#include<stdio.h>
#include<stdbool.h> int top = -1;
/*
在栈顶索引指针为top时,向栈A中压入数据data
*/
bool push(int *A,ElemType data)
{
if(top>=MAX-1 || top<-1)
return false; A[++top] = data;
return true;
} /*
在栈顶索引指针为top时。出栈
*/
bool pop()
{
if(top<0)
return false; top--;
return true;
} /*
栈顶当前索引指针为top,Min数组最大深度也为MAX。
且Min的有效元素数与栈A中的元素个数同样,
它的相应位置用来保存栈A相应位置到栈底这一部分元素中的最小值
*/
void minAll(int *A,int *Min)
{
if(top>MAX-1)
return ;
Min[0] = A[0];
int i;
for(i=1;i<=top;i++)
{
if(Min[i-1] > A[i])
Min[i] = A[i];
else
Min[i] = Min[i-1];
}
} /*
返回栈顶为top时栈中元素的最小值
*/
int min(int *Min)
{
return Min[top];
} int main()
{ int n;
int A[MAX];
int Min[MAX]; while(scanf("%d",&n) != EOF)
{
int i;
for(i=0;i<n;i++)
{
char ci;
while(getchar() != '\n')
continue;
scanf("%c",&ci);
if(ci == 's')
{
ElemType k;
scanf("%d",&k);
push(A,k);
}
if(ci == 'o')
{
pop();
} minAll(A,Min);
if(top<0)
printf("NULL\n");
else
printf("%d\n",min(Min));
}
}
return 0;
}
/************************************************************** Problem: 1522 User: mmc_maodun Language: C Result: Accepted Time:60 ms Memory:1624 kb****************************************************************/【剑指offer】包括min函数的栈的更多相关文章
- 剑指Offer 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路: 这个题是想得到一个时间复杂度为O(1)的min函数,所以应用一个辅助栈,压的时候,如果A栈的压入比B栈压入 ...
- 剑指offer——包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度为O(1)) 该题是自己第一次采用编程的方式来实现Java中栈的功能,故直接借鉴了大牛的代码 import ...
- python剑指offer 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def ...
- 用js刷剑指offer(包含min函数的栈)
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 牛客网链接 js代码 const stack1 = [] const stack2 = ...
- 剑指Offer30——包含min函数的栈
剑指Offer30--包含min函数的栈 1. 题目简述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min.push及pop的时间复杂度是O(1). 2. 题 ...
- 剑指offer-包含min函数的栈20
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution: def __init__(self): self.st ...
- 剑指offer--27.包含min函数的栈
时间限制:1秒 空间限制:32768K 热度指数:252822 本题知识点: 栈 算法知识视频讲解 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为 ...
- 剑指Offer-20.包含min函数的栈(C++/Java)
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 分析: 因为题目要求得到栈中最小元素的min函数时间复杂度为O(1),这里便不选择遍历栈 ...
- 剑指offer-包含min函数的栈-栈和队列-python
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: de ...
- 剑指Offer19 包含min函数的栈
/************************************************************************* > File Name: 19_MinInS ...
随机推荐
- cocos2d-x for js 继承的写法
cocos2d-x for js中集成了两套继承写法,一套是JR的(jquery的作者),一套是google. 目前来说,cocos2d-x for js demo使用JR的写法----未完待续... ...
- easyui源码翻译1.32--Layout(布局)
前言 使用$.fn.layout.defaults重写默认值对象.下载该插件翻译源码 布局容器有5个区域:北.南.东.西和中间.中间区域面板是必须的,边缘的面板都是可选的.每个边缘区域面板都可以通过拖 ...
- ide远程调试
这篇写得好:http://qifuguang.me/2015/09/18/IntelliJ%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95%E6%95%99%E7%A8%8B/
- Android开发UI之给ListView设置布局动画效果
1.通过JAVA代码添加,资源文件基本上不修改 XML文件,只添加了一个ListView,就不贴XML文件的代码了. java代码: public class MainActivity extends ...
- WPF——数据绑定及属性改变事件
一.首先需要封装一下文本框的属性,并且在实体类中添加一个实体类的属性改变函数 public class User : INotifyPropertyChanged //INotifyPropertyC ...
- bzoj1565
很明显是最大权闭合子图,但要注意互相保护的植物打不掉,被互相保护的植物所直接或间接保护的植物也打不掉我们先拓扑排序然后dfs出能打掉的点,然后做最大权闭合子图 ; type node=record p ...
- jasperreports-5.6 + jaspersoftstudio-5.6 生成pdf 文件中文无法正常显示问题
jrxml字段属性设置: <textElement> <font fontName="宋体" pdfFontName="STSong-Light&quo ...
- 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds
RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...
- HDOJ 2167 Pebbles (状态压缩dp)
题意:给你一个n*n的矩阵,让你从矩阵中选择一些数是的他们的和最大,规则是:相邻的两个数不能同时取,位置为(i,j)的数与(i+1,j),(i-1,j),(i,j+1),(i,j-1),(i+1,j+ ...
- Oracle行转列的函数
--行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...