LeetCode热题100 最小栈

题目描述

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。

void push(int val) 将元素val推入堆栈。

void pop() 删除堆栈顶部的元素。

int top() 获取堆栈顶部的元素。

int getMin() 获取堆栈中的最小元素。

示例 1:

输入

"MinStack","push","push","push","getMin","pop","top","getMin"

\[\],\[-2\],\[0\],\[-3\],\[\],\[\],\[\],\[\]

输出

null,null,null,null,-3,null,0,-2

解释

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

minStack.getMin(); --> 返回 -3.

minStack.pop();

minStack.top(); --> 返回 0.

minStack.getMin(); --> 返回 -2.

提示:

−231<=val<=231−1-2^{31} <= val <= 2^{31} - 1−231<=val<=231−1

pop、top 和 getMin 操作总是在 非空栈 上调用

push, pop, top, and getMin最多被调用 3∗1043 * 10^43∗104 次

思路

手写一个栈+最小前缀和。

代码

cpp 复制代码
struct node{
    node(int value, int min_value, node *next) : _value(value), _min_value(min_value), _next(next){}
    int _value;
    int _min_value;
    node* _next;
};

class MinStack {
public:
    MinStack()
    {
        _top = nullptr;
    }
    
    void push(int val)
    {
        node *cur = new node(val, val, nullptr);
        if(_top == nullptr)
        {
            _top = cur;
        }
        else
        {
            cur->_next = _top;
            cur->_min_value = min(cur->_min_value, _top->_min_value);
            _top = cur;
        }
    }
    
    void pop()
    {
        node *cur = _top;
        _top = _top->_next;
        delete cur;
    }
    
    int top()
    {
        return _top->_value;    
    }
    
    int getMin()
    {
        return _top->_min_value;
    }

    node *_top;
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
相关推荐
刘马想放假7 小时前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
05Kevin8 小时前
lk每日冒险题--数据结构6.27
算法
To_OC19 小时前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安1 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者1 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent
北域码匠1 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
卷无止境1 天前
C++ 的Eigen 库全解析
c++