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 最大栈
相关推荐
豆子熊.9 分钟前
外包干了3年,技术退步明显...
软件测试·selenium·测试工具·面试·职场和发展
GISer_Jing14 分钟前
Vue前端进阶面试题目(二)
前端·vue.js·面试
淀粉肠kk26 分钟前
【数据结构】二叉树(2)
数据结构·算法
努力学习的饼干28 分钟前
C++模版特化和偏特化
开发语言·c++
总是学不会.28 分钟前
【贪心算法】绿洲之旅:最少次数补给探索
java·算法·intellij-idea
超甜的布丁mm43 分钟前
【图像检测】深度学习与传统算法的区别(识别逻辑、学习能力、泛化能力)
图像处理·人工智能·python·深度学习·算法·视觉检测·卷积神经网络
予安灵1 小时前
图的邻接矩阵和邻接表存储
数据结构·算法·
南宫生1 小时前
力扣-位运算-1【算法学习day.41】
java·学习·算法·leetcode
Felven1 小时前
E. Negatives and Positives
算法
kitesxian2 小时前
Leetcode207. 课程表(HOT100)
数据结构