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 分钟前
ES6面试题
前端·面试·es6
GSDjisidi14 分钟前
日本本社企业直招|Java /cobol/C#/PM/PL/Salesforce/AWS/SAP 等,正社员/個人事業主,高度人才+20 分
职场和发展
jndingxin21 分钟前
OpenCV CUDA模块光流计算-----实现Farneback光流算法的类cv::cuda::FarnebackOpticalFlow
人工智能·opencv·算法
编程绿豆侠33 分钟前
力扣HOT100之栈:394. 字符串解码
java·算法·leetcode
real_metrix40 分钟前
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
c++·迭代器·迭代器失效·erase
朝朝又沐沐40 分钟前
基于算法竞赛的c++编程(18)string类细节问题
开发语言·c++·算法
汪子熙1 小时前
走进 Fundamental NGX Platform:从 SAP 设计体系到高生产力组件层
前端·javascript·面试
拉不动的猪1 小时前
单点登录全流程小姐
前端·javascript·面试
记得早睡~1 小时前
leetcode73-矩阵置零
数据结构·leetcode·矩阵
半桔1 小时前
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
linux·运维·服务器·面试·centos