栈 · 有getMin功能的栈O(1)
题面
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中的最小元素的操作。
要求
pop(), push(), getMin()时间复杂度都是O(1)
思路
1.准备两个栈,数据栈+最小元素栈
2.压入元素时,先压入数据栈,然后与最小元素栈顶比较;若小,则压入,若大,不做处理(1)/压入当前栈顶(2)
(1)若不做处理,那么需要在pop()弹出时,做判断,若stackData要弹出的元素与stackMin顶相等,那么将stackMin顶也一并弹出
(2)若2中采用再次压入stackMin顶元素,那么在pop()函数中,就只要弹出两个栈顶即可,逻辑较为简单。
实现 (代码未测试,注意!)
【1】占用额外空间较小,但pop(),push()函数较为复杂
class MyStack_1 {
private:
stack<int> stackData;//数据栈
stack<int> stackMin;//最小元素栈
public:
void push(int num)
{
stackData.push(num);
if (stackMin.empty())//为空,直接压入
stackMin.push(num);
else
{
if (num < stackMin.top())
stackMin.push(num);
}
}
int pop()
{
if (!stackData.empty())//数据栈非空
{
int top = stackData.top();
stackData.pop();
if (top == stackMin.top())
stackMin.pop();
return top;
}
}
int getMin()
{
return stackMin.top();
}
int top()
{
return stackData.top();
}
};
【2】占用额外空间较大,操作函数简单。
class MyStack_2 {
private:
stack<int> stackData;//数据栈
stack<int> stackMin;//最小元素栈
public:
void push(int num)
{
stackData.push(num);
if (stackMin.empty())//为空,直接压入
stackMin.push(num);
else
{
if (num < stackMin.top())//小,压入它
stackMin.push(num);
else//大,压入当前栈顶
stackMin.push(stackMin.top());
}
}
int pop()
{
if (!stackData.empty())//数据栈非空
{
int top = stackData.top();
stackData.pop();
stackMin.pop();
return top;
}
}
int getMin()
{
return stackMin.top();
}
int top()
{
return stackData.top();
}
};
栈 · 有getMin功能的栈O(1)的更多相关文章
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
刚入手了一本<程序员代码面试指南>,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象. 题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈, ...
- 设计一个有getMin功能的栈
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第一章中“设计一个有getMin功能的栈”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明 ...
- 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...
- 栈和队列----设计一个有getMin功能的栈
设计一个有getMin功能的栈 设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1). package ...
- 设计一个有getMin功能的栈(2)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- 设计一个有getMin功能的栈(1)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- 常见面试算法题JS实现-设计一个有getMin功能的栈
前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...
- 栈和队列问题:设计一个有 getMin 功能的栈
[知识点] 栈是一个先进后出(FILO-First In Last Out)的数据结构,队列是一种先进先出(FIFO-First In First Out)的数据结构. [题目] 实现一个特殊的栈,在 ...
- 左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈
[题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] 1.pop.push.getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构. ...
随机推荐
- Qt编写自定义控件58-直方对称图
一.前言 本控件也非原创控件,是参考网上的代码而来的,对称顾名思义就是将画布平均成上下两部分,将设置的值自动按照画布高度的一半作为参照高度进行绘制,然后增加动态过渡效果,有点类似于声音播放时候的频谱效 ...
- 测试理论03-svn-缺陷及报告-jira
回顾--用例设计方法 边界值(三个点,使用步骤) 判定表(适用,四个组成部分,规则,使用) 因果图(适用,四个符号,使用) 正交表(定义,特性,L_n(m^k),因素,水平,使用,工具allpairs ...
- 【Leetcode_easy】605. Can Place Flowers
problem 605. Can Place Flowers 题意: solution1: 先通过简单的例子(比如000)发现,通过计算连续0的个数,然后直接算出能放花的个数,就必须要对边界进行处理, ...
- Cas(02)——部署Cas Server
部署Cas Server Cas应用都需要有一个Cas Server.Cas Server是基于Java Servlet实现的,其要求部署在Servlet2.4以上版本的Web容器中.在此笔者将其部署 ...
- 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- Linear regression with one variable - Cost function
摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第二章<单变量线性回归>中第7课时<代价函数>的视频原文字幕.为本人在视频学习过程中逐字逐句记录下 ...
- 【VS开发】【miscellaneous】 Windows下配置Git
[转自]http://blog.csdn.net/exlsunshine/article/details/18939329 1.从git官网下载windows版本的git:http://git-scm ...
- Vue 拖拽组件 vuedraggable 、 vue-dragging 、awe-dnd
参考链接:http://www.ptbird.cn/vue-draggable-dragging.html vue-draggable 学习和使用:https://www.jianshu.com/p/ ...
- vue vue-cli3 修改elementui的date-picker源码 引入node_modules里的element-ui后报错exports is not defined
报错说明: 1.复制node_modules/element-ui/packages/date-picker里的文件到自己项目里 --------->>>>>>& ...
- 如何安装Oracle--新手安装Oracle教程
1. 将win32_11gR2_database_1of2.zip与win32_11gR2_database_1of2.zip 解压到当前目录 PS:选中两个压缩包后右键解压到当前文件夹:必须同时解压 ...