《Cracking the Coding Interview》——第3章:栈和队列——题目2
2014-03-18 05:08
题目:实现一个栈,除了能进行push和pop之外,还能在O(1)时间内返回栈中最小的元素。
解法:用另一个“最小栈”存放最小的元素,每当有不小于当前最小值的元素进栈时,就代表最小值更新了(就算与当前最小值相等,也代表个数变了)。这时,同时要将最小值进栈。这个最小栈的栈顶就是最小的元素。出栈时,遇到数据栈的栈顶元素与最小栈相等时,要同时将最小栈出栈;否则只弹出数据栈即可。
代码:
// 3.2 Design a modified stack that in addition to Push and Pop can also provide minimum element present in the stack via Min function.
#include <climits>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std; class MinStack {
public:
bool empty() {
return st.empty();
} void push(int val) {
st.push(val);
if (min_st.empty() || val <= min_st.top()) {
min_st.push(val);
}
} void pop() {
if (st.empty()) {
return;
}
if (st.top() == min_st.top()) {
min_st.pop();
}
st.pop();
} int top() {
if (st.empty()) {
return INT_MIN;
}
return st.top();
} int min() {
if (st.empty()) {
return INT_MIN;
}
return min_st.top();
}
private:
stack<int> st;
stack<int> min_st;
}; int main()
{
char s[];
int op;
MinStack st; while (scanf("%s", s) == && strcmp(s, "END") != ) {
if (strcmp(s, "PUSH") == ) {
scanf("%d", &op);
st.push(op);
printf("push=%d\n", op);
} else if (strcmp(s, "POP") == ) {
op = st.top();
st.pop();
printf("pop=%d\n", op);
} else if (strcmp(s, "TOP") == ) {
printf("top=%d\n", st.top());
} else if (strcmp(s, "MIN") == ) {
printf("min=%d\n", st.min());
}
} return ;
}
《Cracking the Coding Interview》——第3章:栈和队列——题目2的更多相关文章
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- 《Cracking the Coding Interview》读书笔记
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...
- Cracking the coding interview
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- Cracking the Coding Interview(Trees and Graphs)
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...
- Cracking the Coding Interview(Stacks and Queues)
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...
- 数据结构(c语言版,严蔚敏)第3章栈和队列
第3章栈和队列
- 二刷Cracking the Coding Interview(CC150第五版)
第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...
- Cracking the Coding Interview 150题(二)
3.栈与队列 3.1 描述如何只用一个数组来实现三个栈. 3.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值.pop.push和min三个方法的时间复杂度必须为O( ...
- 数据结构(C语言版)-第3章 栈和队列
3.1 栈和队列的定义和特点3.2 案例引入3.3 栈的表示和操作的实现3.4 栈与递归3.5 队列的的表示和操作的实现3.6 案例分析与实现 基本操作有入栈.出栈.读栈顶元素值.建栈.判断栈满.栈空 ...
随机推荐
- COGS 678. 双重回文数
★ 输入文件:dualpal.in 输出文件:dualpal.out 简单对比时间限制:1 s 内存限制:128 MB Dual Palindromes 双重回文数 描述 [USACO ...
- navicat for mysql注册码:NAVN-LNXG-XHHX-5NOO
名.组织可以为空或任意填写. 摘自: navicat for mysql10.0.0.0注册码中“名”.“组织”...._百度知道
- 同步软件UltraCompare 64位 软件及注册机
软件及注册机下载: https://share.weiyun.com/f09e6243887e374ead1b3a3ab8f611a9 软件官方下载地址: https://www.ultraedit ...
- CopyTranslator-复制即翻译的外文辅助阅读翻译解决方案
英语/English 复制即翻译的外文辅助阅读翻译解决方案 请尽快更新到,这是你没有体验过的全新版本,只需3分钟,你就会跟我一样,爱上这个软件. 如果您觉得软件对您有所帮助,不用follow,不用fo ...
- SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成
今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...
- ERROR 3077 (HY000): To have multiple channels, repository cannot be of type FILE; Please check the repository configuration and convert them to TABLE.
在5.7.16搭建多源复制时,出现如下错误: mysql> change master to master_host='192.168.56.156',master_user='repl', ...
- 2017.11.20 基于JSP+Servlet+JavaBean实现复数运算(一)
(7)在Servlet中使用JavaBean Servlet和JavaBean都是类,在Servlet中使用JavaBean有两种方式: 1.在一个Servlet中单独使用JavaBean 一般完成的 ...
- tcp 的编程例子
https://www.cnblogs.com/ylllove/p/6852125.html
- Matlab 绘图实例
概要 每次用 Matlab 绘图都要搜一堆资料设置一些参数,本次将绘图中的一些参数设置实例展示在这里,以备不时之需.暂包括折线图,面积图. 折线图实例 下图是效果图: 图 1:折线图效果图 ...
- this指向问题(1)
在JS中,this一般有四种绑定的方式,但是在确定到底是哪种绑定之前必须先找到函数的调用位置.接下来先介绍其中的三种: 1.默认绑定 其实所谓的默认绑定就是函数直接调用(前面没有什么东西来点它),在默 ...