题目描述:

我们知道平凡的栈有几个操作:

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))相关推荐

  1. 7-1 用虚函数计算各种图形的面积 (20分) 定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)

    7-1 用虚函数计算各种图形的面积 (20分) 定义抽象基类Shape,由它派生出五个派生类:Circle(圆形).Square(正方形).Rectangle( 长方形).Trapezoid (梯形) ...

  2. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )

    文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...

  3. 汇编语言 执行push和执行pop区别 栈顶的变化范围

    执行pop时,先读取SS:SP处的数据,后改变SP. 执行push时,先改变SP,后向SS:SP处传送. SP的操作单位是2.[一字是两个字节,X86之中是的!] push.pop等栈操作指令,修改的 ...

  4. html画一个立体苹果,使用ai绘画出卡通2.5D风格立体苹果手机的具体操作步骤

    本章节为小伙伴们讲解额度教程是与ai软件相关,让我们一起去下文详细学习下使用ai绘画出卡通2.5D风格立体苹果手机的具体操作步骤. 1.新建一个圆角矩形,随便给一个填色,不要有描边,圆角半径和尺寸后面 ...

  5. PTA 阅览室 (20 分) 精简版

    天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数.当管理员将0 ...

  6. 全网首发 | 第一个opencv_contrib扩展模块中文教程限时领取

    点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 OpenCV是学习计算机视觉的重要工具之一,然而多年以来,在深度学习的deBuff下,Ope ...

  7. PTA 1003 我要通过! (20 分)

    1003 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件 ...

  8. 2-9 彩虹瓶 (20 分)

    2-9 彩虹瓶 (20 分) 彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将 ...

  9. 6-7 使用函数求素数和 (20 分)

    本题要求实现一个判断素数的简单函数.以及利用该函数计算给定区间内素数和的函数. 素数就是只能被1和自身整除的正整数.注意:1不是素数,2是素数. 函数接口定义: int prime( int p ); ...

最新文章

  1. SharePoint 2013 入门教程之创建页面布局及页面
  2. Maven(八)Eclipse创建Web项目(复杂方式)
  3. Binary Tree Level Order Traversal II --leetcode C++
  4. JVM 内存管理、自带性能监测调优工具 (jstack、jstat)及 JVM GC 调优
  5. stl之bit_vector原理及应用
  6. coherence初识
  7. Azure Storage Explorer
  8. 小程序ColorUI使用简易教程
  9. 计算机创业计划书800字大全,2017创业计划书范文800字
  10. wex5bex5 ---- (一)
  11. SQL语句实现增删改查(1)
  12. Java毕设项目直播购物平台(java+VUE+Mybatis+Maven+Mysql)
  13. 终于有人把 Docker 讲清楚了,万字长文详解!
  14. 转:这些道理不懂,你注定就是穷打工的命
  15. nxp_3|虚拟机Linux内核资源
  16. 广告电商系统开发功能只订单处理
  17. SpringBoot中如何使用单元测试
  18. 推荐几个不错的公众号
  19. tensorflow入门之MINIST手写数字识别
  20. 爱与灾难·《致我们终将逝去的青春》

热门文章

  1. 轻松掌控全链路监控:方案概述与对比 | 真的很干!
  2. 曹大带我学 Go(10)—— 如何给 Go 提性能优化的 pr
  3. 华为云RTC服务架构及应用实践
  4. 【线上直播】Xilinx低延时、高质量实时视频服务技术实践
  5. LiveVideoStack线上分享第四季(一):沉浸式音频技术的采集,传输,播放,以及应用场景初探...
  6. 吉长江:基于学习的视频植入技术是未来趋势
  7. Janus流媒体服务器信令分析
  8. ​内核调试技巧--systemtap定位丢包原因
  9. 化繁为简 - 腾讯计费高一致TDXA的实践之路
  10. 金融业对区块链必须有足够认识