面试题21:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

栈内压入3、4、2、1之后接连两次弹出栈顶数字再压入0时,数据栈、辅助栈和最小值的状态

代码如下:

#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;template<typename T>
class StackWithMin
{public:void push(const T&value);void pop();const T&min();
private:stack<T>m_data;stack<T>m_min;
};template<typename T>
void StackWithMin<T>::push(const T &value)
{m_data.push(value);if (m_min.size() == 0 || value < m_min.top()) m_min.push(value);else m_min.push(m_min.top());
}template<typename T>
void StackWithMin<T>::pop()
{assert(m_data.size() > 0 && m_min.size() > 0);m_data.pop();m_min.pop();
}template<typename T>
const T&StackWithMin<T>::min()
{assert(m_data.size() > 0 && m_min.size() > 0);return m_min.top();
}

测试用例:
● 新压入栈的数字比之前的最小值大。
● 新压入栈的数字比之前的最小值小。
● 弹出栈的数字不是最小的元素。
● 弹出栈的数字是最小的元素。
本题考点:
● 考查分析复杂问题的思维能力。在面试的时候,很多应聘者都止步于添加一个变量保存最小元素的思路。其实只要举个例子多做几次入栈、出栈的操作就能看出问题,并想到也要把最小元素用另外的辅助栈保存。当我们面对一个抽象复杂的问题的时候,可以用几个具体的例子来找出规律。找到规律之后再解决问题,就容易多了。
● 考查应聘者对栈的理解。

[剑指offer]面试题21:包含min函数的栈相关推荐

  1. 剑指offer面试题[21]包含min函数的栈

    题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 分析: 看到这个问题,我们的第一反应可能是每次压入一个新元素进栈时,将栈里所有的元素排序,让最小的元位于栈顶,这样就能在 ...

  2. 剑指offer面试题30. 包含min函数的栈(辅助栈)

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 思路 详见链接 代码 class Min ...

  3. 【剑指offer-Java版】21包含min函数的栈

    包含min操作的栈:在基本栈基础上提供一个Min功能,可以取得当前栈的最小值 重点在于思路,拿空间换取了Min的功能,申请一个等量空间的辅助栈用于存取栈中的最小元素 public class _Q21 ...

  4. 剑指offer(20)包含min函数的栈

    import java.util.Stack;public class Solution {//创建俩个辅助栈,stack1用来存放压入的元素,stack2用来保存较小元素Stack<Integ ...

  5. 剑指offer——面试题21:包含min函数的栈

    剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...

  6. 剑指offer——面试题7:用两个栈实现队列

    剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...

  7. 剑指offer:面试题30. 包含min函数的栈

    题目:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). MinStack min ...

  8. [剑指offer]面试题7:用两个栈实现队列

    面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...

  9. [剑指offer]面试题1:赋值运算符函数

    面试题1:赋值运算符函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString {public:CMyString(char *pData = nu ...

最新文章

  1. (建议收藏)matlab在线性代数问题中的计算机求解进阶问题及解决方案集锦
  2. 关于单点登录中同一浏览器session信息共享的又一解决办法
  3. 事务管理:事务的状态相关知识笔记
  4. js 读取php文件内容为空,PHP 读取文件内容代码(txt,js等)
  5. web前端已经不行了?千万不要信
  6. Docker的简单使用
  7. 计算机2010ppt试题,计算机Office2010 PPT试题.doc
  8. 进程 线程 协程_进程 线程 协程 管程 纤程 概念对比理解
  9. java第二章_Java第二章基本语法
  10. java jdbc 连接mysql 数据库
  11. Oracle账户被锁定后如何解锁
  12. 怎样的工作量评估更合理?
  13. 郭涛 黄渤 田原09贺岁大片《高兴》DVD修正版
  14. 计算机efs加密,2分钟让你学会电脑EFS文件加密
  15. WPF 如何在静态资源定义字体大小
  16. MarkDown 图片大小问题
  17. 【计算机毕业设计】基于springboot的景区旅游网站
  18. T3出行快手首秀直播PK赛项目总曝光破亿
  19. 2023年全国最新会计专业技术资格精选真题及答案16
  20. 金蝶K3 WISE版本过服务期后打补丁方法

热门文章

  1. Python 3.6学习笔记(一)
  2. Android之jni编译出现multiple definition of ‘××××ב
  3. LeetCode之Two Sum II - Input array is sorted
  4. linux之more命令
  5. C和C++语言编程里面常用函数或者编程技巧总结(不断更新)
  6. 其实python面向对象3分钟就可以入门(14)
  7. php框架中uri路由机制,URI 路由 — CodeIgniter 3.1.5 中文手册|用户手册|用户指南|中文文档...
  8. php ftp 创建文件夹失败,PHP使用FTP函数创建目录
  9. 16岁上大学,25岁博士毕业,她还是南大医学院最年轻的博导!
  10. 用MATLAB三步完成机器人搭建