PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))
题目描述:
我们知道平凡的栈有几个操作:
push(value) 将 value 压入栈 pop() 将栈顶元素弹出, 并返回这个弹出的元素。
现在我们想要在平凡栈的基础上实现以下几个操作:
push(val) 将 val 压入栈;
pop() 将栈顶元素弹出;
min() 返回栈中元素的最小值。
输入格式:
第一行输入一个N( 0=<N<=1000000),代表有N行操作。 接下来N行每行有一个操作,题目保证操作不会越界.
输出格式:
输出每次查询min()时的结果,pop()不用输出
输入样例:
6
push 1
min
push 2
min
push 3
min
输出样例:
1
1
1
分析:
全网首发啊有木有-_-||,这道PTA题其实是一道经典面试题的改编版,本题要求输入小于100W种操作,时间限制在600ms,这就要求我们只能用O(n)或O(nlogn)去实现,毋庸置疑遍历n种操作的循环必须有,所以就要求最小值时的复杂度为o(1),由此引出一个经典思想:空间换时间。下面给出代码:
代码:
#include<iostream>
#include<stdio.h>
int a[1000005], b[1000005]; //a是存放所有值的,b是存放小值的 ,从1开始存放
int main() {int num1 = 0, num2 = 0; //a、b数组的计数器 ,0代表无存放 int n;scanf("%d", &n);while(n--) {char s[5];scanf("%s", &s);if(s[1] == 'u') {int x;scanf("%d", &x);if(!num1) {a[++num1] = x; b[++num2] = x;} else {a[++num1] = x;if(x <= b[num2]) b[++num2] = x;}} else if(s[1] == 'o') {if(a[num1] == b[num2]) { a[num1--] = 0; b[num2--] = 0; }else a[num1--] = 0;} else printf("%d\n", b[num2]);}
return 0; }
二更:
有评论反应代码无法运行, 已做调整。 无法运行的原因是:
代码中a,b数组的规模都开到了100w, 而规模50w以上的数组就要定义为全局变量, 否则会报错。
收获:
1、空间换时间的思想
2、C语言比C++要高效一些
每日分享:
平时在做题的时候,一定要寻找最优解,而不是 ac 了就不管了,应该多看看别人的解法。
PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))相关推荐
- 7-1 用虚函数计算各种图形的面积 (20分) 定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)
7-1 用虚函数计算各种图形的面积 (20分) 定义抽象基类Shape,由它派生出五个派生类:Circle(圆形).Square(正方形).Rectangle( 长方形).Trapezoid (梯形) ...
- 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...
- 汇编语言 执行push和执行pop区别 栈顶的变化范围
执行pop时,先读取SS:SP处的数据,后改变SP. 执行push时,先改变SP,后向SS:SP处传送. SP的操作单位是2.[一字是两个字节,X86之中是的!] push.pop等栈操作指令,修改的 ...
- html画一个立体苹果,使用ai绘画出卡通2.5D风格立体苹果手机的具体操作步骤
本章节为小伙伴们讲解额度教程是与ai软件相关,让我们一起去下文详细学习下使用ai绘画出卡通2.5D风格立体苹果手机的具体操作步骤. 1.新建一个圆角矩形,随便给一个填色,不要有描边,圆角半径和尺寸后面 ...
- PTA 阅览室 (20 分) 精简版
天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数.当管理员将0 ...
- 全网首发 | 第一个opencv_contrib扩展模块中文教程限时领取
点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 OpenCV是学习计算机视觉的重要工具之一,然而多年以来,在深度学习的deBuff下,Ope ...
- PTA 1003 我要通过! (20 分)
1003 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件 ...
- 2-9 彩虹瓶 (20 分)
2-9 彩虹瓶 (20 分) 彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将 ...
- 6-7 使用函数求素数和 (20 分)
本题要求实现一个判断素数的简单函数.以及利用该函数计算给定区间内素数和的函数. 素数就是只能被1和自身整除的正整数.注意:1不是素数,2是素数. 函数接口定义: int prime( int p ); ...
最新文章
- SharePoint 2013 入门教程之创建页面布局及页面
- Maven(八)Eclipse创建Web项目(复杂方式)
- Binary Tree Level Order Traversal II --leetcode C++
- JVM 内存管理、自带性能监测调优工具 (jstack、jstat)及 JVM GC 调优
- stl之bit_vector原理及应用
- coherence初识
- Azure Storage Explorer
- 小程序ColorUI使用简易教程
- 计算机创业计划书800字大全,2017创业计划书范文800字
- wex5bex5 ---- (一)
- SQL语句实现增删改查(1)
- Java毕设项目直播购物平台(java+VUE+Mybatis+Maven+Mysql)
- 终于有人把 Docker 讲清楚了,万字长文详解!
- 转:这些道理不懂,你注定就是穷打工的命
- nxp_3|虚拟机Linux内核资源
- 广告电商系统开发功能只订单处理
- SpringBoot中如何使用单元测试
- 推荐几个不错的公众号
- tensorflow入门之MINIST手写数字识别
- 爱与灾难·《致我们终将逝去的青春》