Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

实现一个栈的基本功能,并且可以用o(1)的时间取出栈的最小元素。

使用两个栈的解题方法:

建立两个栈容器,一个常规使用elementStack,一个保存栈内最小元素minStack。

注意:

常规栈中最小的元素可能不唯一。当某个最小元素出栈时,minStack也需做出出栈动作。因此minStack栈中记录最小元素的数量应该和elementStack中最小元素数量相同。

也就是,每次进行常规栈压栈时,都进行和min栈记录的最小元素比较,将小于等于min栈最小元素的常规元素压栈。

代码:

 class MinStack {
public:
void push(int x) {
element.push(x);
if (min.empty() || x <= min.top())
min.push(x);
} void pop() {
if (!element.empty()) {
if (element.top() == min.top())
min.pop();
element.pop();
}
} int top() {
if (!element.empty())
return element.top();
} int getMin() {
if (!min.empty())
return min.top();
} private:
stack<int> element;
stack<int> min;
};

也可以只使用一个栈,即常规栈。只是压栈的每个元素都包含当前栈内最小元素值。

即,假设当前栈内最小值为m,当对元素A压栈时,若A<=m,则压入 (A, A),若A>m,则压入 (A, m)。

(代码略)

附录:

各种数据结构最简洁表示方法,参考《数据结构与算法分析—C语言版》

最新文章

  1. css加载优化
  2. Linux centOS下搭建RTMP服务器的具体步骤
  3. C++中explicit关键字的作用
  4. 59. Spiral Matrix &amp;&amp; Spiral Matrix II
  5. 【ruby】ruby基础知识
  6. C# Control 控件DrapDrop不触发的问题
  7. 处理部分WordPress核心代码或功能,让你的网站更快
  8. Android 百度地图 SDK v3.0.0 (一)
  9. irms模拟数据生成及数据分析
  10. DDD实践(一)
  11. NumPy学习笔记 三 股票价格
  12. MyEclipse无法部署项目
  13. TypeScript|Angular踩坑笔记
  14. HDP Hive StorageHandler 下推优化的坑
  15. 莫烦scikit-learn学习自修第三天【通用训练模型】
  16. EscapeDataString URI 字符串太长
  17. python学习笔记_week8
  18. [日常] Go语言圣经-文本和HTML模板习题
  19. 【Java】得到当前系统时间,精确到毫秒
  20. cocos命令行生成项目

热门文章

  1. POJ1064 Cable master 【二分找最大值】
  2. 通过 flume 上传数据到hive
  3. [转] 利用dockerize模板为容器内应用生成配置文件和环境变量
  4. PIE SDK打开矢量数据
  5. QWebView使用
  6. Java 继承初探
  7. Centos安装zeromq, jzmq
  8. How to fix the issue that GEM_HOME and/or GEM_PATH not set issue for rvm in mac version 10.12
  9. (转)创建DB2实例时出错,请大家帮忙解决
  10. HashMap的结构算法及代码分析