实现思路:
用一个栈(数据栈)保存数据,另外一个栈(最小值栈)保存最小值。

每次Push时,将数据直接压入数据栈,然后将数据根据条件压入到最小值栈。如果最小值栈为空,直接压入最小值栈。如果数据比最小值栈栈顶元素小,则将其压入最小值栈。否则压入最小值栈栈顶元素。

每次Pop时,将数据栈和最小值栈的栈顶都进行pop。

实现代码:
头文件StackWithMin.h

class StackWithMin
{public:bool Empty();std::size_t Size();int Top();void Push(int newData);// 这是重点void Pop();// 这是重点int Min();// 这是重点private:std::stack<int> m_datas;std::stack<int> m_mins;
};

头文件StackWithMin.cpp

bool StackWithMin::Empty()
{return m_datas.empty();
}std::size_t StackWithMin::Size()
{return m_datas.size();
}int StackWithMin::Top()
{// 因为std::stack自身有判空处理,这里不处理了return m_datas.top();
}void StackWithMin::Push(int newData) // 这是重点
{m_datas.push(newData);if (m_mins.empty() || newData < m_mins.top()) m_mins.push(newData);else m_mins.push(m_mins.top());
}void StackWithMin::Pop() // 这是重点
{// 因为std::stack自身有判空处理,这里不处理了m_datas.pop();m_mins.pop();
}int StackWithMin::Min() // 这是重点
{return m_mins.top();
}

21. 包含min函数的栈(C++版本)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  7. 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列

    一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...

  8. 【简洁写法】剑指 Offer 30. 包含min函数的栈

    立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...

  9. 包含min函数的栈 python_面试题_设计包含 min函数的栈

    设计包含 min函数的栈() 定义栈的数据结构,要求添加一个 minminmin函数,能够得到栈的最小元素. 要求函数 min.push以及 pop 的时间复杂度都是 O(1). #include u ...

  10. java的min函数_Java语言实现包含min函数的栈

    package stack; import java.util.ArrayList; /** * 实现包含min函数的栈 * @author DHC * @param */ public class ...

最新文章

  1. 以Java 8 为基准
  2. 科大星云诗社动态20210316
  3. [设计模式]抽象工厂模式
  4. Zjnu Stadium HDU - 304 加权并查集
  5. 两张表的笛卡尔积用sql语句
  6. SubSonic中的字段付值--MakeOld Update
  7. [转载] 2020最新Java面试题,常见面试题及答案汇总
  8. numpy中的*(矩阵对应位置元素相乘)和np.dot(矩阵执行矩阵乘法运算)
  9. opencv_python使用cv2.imread()读取中文路径报错问题(转)
  10. Oracle 分析函数的使用(主要是rollup用法)
  11. 利用计算机计算问题的案例,两个基于计算思维培养的高中信息技术教学案例
  12. 郝斌c语言视频笔记,郝斌老师C语言专题笔记
  13. 【Ruby on Rails全栈课程】4.4 评论功能实现(三)--分页(插件Kaminari)
  14. opencv怎么使用GPU加速
  15. 如何做好积分商城运营?
  16. 酒趣与酒情:聊聊酒吧和酒馆的不同
  17. 微软office即点即用服务能关闭吗?_技术贴:关于OFFICE各版本的下载安装卸载以及激活方法大全...
  18. 量化交易入门(精华必读版)
  19. 就这样,我走完了程序员的前五年,共勉!
  20. 99%卖家不知道的秘密让您每年节省几万元的“人为干涉订单“费用

热门文章

  1. 众包专访:告别接包黑历史,来到开源中国众包接包小记
  2. .NET组件和COM组件之间的相互操作方法
  3. 在你的Android上执行Linux命令
  4. SCVMM2008测试手册
  5. C#3.0学习(2)---对象集合初始化器
  6. 20.变量及数据类型
  7. 6.jQuery appendTo问题解决
  8. oracle 10g perl,perl中访问oracle10g入门
  9. android中的适配器模式
  10. POJ 1182 食物链(带权并查集)