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 最大栈
相关推荐
kyriewen2 小时前
白宫直接给 OpenAI 下了限制令,GPT-5.6 不能随便放出来了
前端·javascript·面试
刘马想放假5 小时前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
未秃头的程序猿6 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
05Kevin7 小时前
lk每日冒险题--数据结构6.27
算法
AI人工智能_电脑小能手7 小时前
【大白话说Java面试题 第125题】【并发篇】第25题:说说 Java 线程的中断机制
java·后端·面试
To_OC17 小时前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
kyriewen19 小时前
面试官问你:“AI 能写 80% 的代码了,公司为什么还需要你?”
前端·javascript·面试
冬奇Lab19 小时前
每日一个开源项目(第141篇):hiring-agent - HackerRank 开源了他们的简历评分系统,你的简历能得几分?
人工智能·面试·开源