leetcode155.最小栈,两个栈

leetcode155.最小栈

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

示例:

MinStack minStack

目录

题目分析

  • 题目要求:实现一个栈,支持普通栈的操作,并且可以在O(1)时间复杂度内获取栈中的最大值。
  • 算法应用 :使用两个栈,一个用于存储所有元素(dataStack),另一个用于存储最大值(maxStack)。

算法步骤

  1. 初始化 :创建两个空栈 dataStackmaxStack
  2. 入栈(push)
    • 将元素压入 dataStack
    • 如果 maxStack 为空或新元素大于等于 maxStack 的栈顶元素,则也将新元素压入 maxStack
  3. 出栈(pop)
    • dataStack 弹出元素。
    • 如果弹出的元素等于 maxStack 的栈顶元素,则也从 maxStack 弹出元素。
  4. 获取栈顶元素(top) :直接返回 dataStack 的栈顶元素。
  5. 获取最大值(getMax) :直接返回 maxStack 的栈顶元素。

算法流程

push 需要更新 pop 需要更新 top getMax 开始 初始化dataStack和maxStack 操作类型 检查maxStack dataStack.push x maxStack.push x dataStack.pop maxStack.pop dataStack.top maxStack.top 结束

算法代码

cpp 复制代码
class MinStack {
private:
    stack<int> dataStack;
    stack<int> minStack;
public:
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
        if(minStack.empty() || x<=minStack.top()) minStack.push(x);
        dataStack.push(x);
    }
    
    void pop() {
        if(minStack.top()==dataStack.top()) minStack.pop();
        dataStack.pop();
    }
    
    int top() {
        return dataStack.top();
    }
    
    int min() {
        return minStack.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->min();
 */

算法分析

  • 时间复杂度:所有操作均为O(1)。
  • 空间复杂度:O(n),其中n是栈中元素的数量。
  • 易错点 :在 pushpop 操作中,需要正确处理 maxStack 的更新。

相似题目

题目编号 题目描述
155 最小栈
716 最大栈
相关推荐
Darkwanderor1 天前
线程概念和Linux线程
linux·c语言·c++
lingran__1 天前
C++ 高阶数据结构:红黑树万字详解|完整原理推导 + 插入实现 + 完整性校验【STL 底层】
数据结构·c++·面试·红黑树·二叉搜索树·平衡二叉树·stl底层
ssshooter1 天前
为什么明明只有一个 12px 的小元素,父容器却有 63px 高?
前端·javascript·面试
东东最爱敲键盘1 天前
day9.C++多态之虚函数
开发语言·c++
fkyyly1 天前
hermes解读
算法·code_agent
淡海水1 天前
15-07-YooAsset面试篇-Unity性能优化与内存管理
java·unity·面试·性能优化·c#·游戏引擎
Darkwanderor1 天前
Linux线程控制
linux·c语言·c++
过期的秋刀鱼!1 天前
使用都热编码的分类特征
人工智能·算法·决策树·机器学习·分类·数据挖掘
wabs6661 天前
关于哈希表【力扣383.赎金信的思考】
算法·leetcode·散列表
moonsims1 天前
低空量子无人机
前端·数据结构