【Leetcode】【Easy】Min Stack
2024-09-01 08:29:44
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语言版》
最新文章
- css加载优化
- Linux centOS下搭建RTMP服务器的具体步骤
- C++中explicit关键字的作用
- 59. Spiral Matrix &;&; Spiral Matrix II
- 【ruby】ruby基础知识
- C# Control 控件DrapDrop不触发的问题
- 处理部分WordPress核心代码或功能,让你的网站更快
- Android 百度地图 SDK v3.0.0 (一)
- irms模拟数据生成及数据分析
- DDD实践(一)
- NumPy学习笔记 三 股票价格
- MyEclipse无法部署项目
- TypeScript|Angular踩坑笔记
- HDP Hive StorageHandler 下推优化的坑
- 莫烦scikit-learn学习自修第三天【通用训练模型】
- EscapeDataString URI 字符串太长
- python学习笔记_week8
- [日常] Go语言圣经-文本和HTML模板习题
- 【Java】得到当前系统时间,精确到毫秒
- cocos命令行生成项目
热门文章
- POJ1064 Cable master 【二分找最大值】
- 通过 flume 上传数据到hive
- [转] 利用dockerize模板为容器内应用生成配置文件和环境变量
- PIE SDK打开矢量数据
- QWebView使用
- Java 继承初探
- Centos安装zeromq, jzmq
- How to fix the issue that GEM_HOME and/or GEM_PATH not set issue for rvm in mac version 10.12
- (转)创建DB2实例时出错,请大家帮忙解决
- HashMap的结构算法及代码分析