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 最大栈
相关推荐
tekin5 分钟前
Go、Java、Python、C/C++、PHP、Rust 语言全方位对比分析
java·c++·golang·编程语言对比·python 语言·php 语言·编程适用场景
liruiqiang057 分钟前
机器学习 - 投票感知器
人工智能·算法·机器学习
小禾苗_1 小时前
C++ ——继承
开发语言·c++
OrangeJiuce2 小时前
【QT中的一些高级数据结构,持续更新中...】
数据结构·c++·qt
程序员-King.5 小时前
【接口封装】——13、登录窗口的标题栏内容设置
c++·qt
学编程的小程5 小时前
LeetCode216
算法·深度优先
leeyayai_xixihah5 小时前
2.21力扣-回溯组合
算法·leetcode·职场和发展
01_5 小时前
力扣hot100——相交,回文链表
算法·leetcode·链表·双指针
萌の鱼5 小时前
leetcode 2826. 将三个组排序
数据结构·c++·算法·leetcode
Buling_05 小时前
算法-哈希表篇08-四数之和
数据结构·算法·散列表