当前位置: 首页 > article >正文

【数据结构-栈】力扣155. 最小栈

设计一个支持 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.
在这里插入图片描述

class MinStack {
    stack<int> x_stack;
    stack<int> min_stack;
public:
    MinStack() {
        min_stack.push(INT_MAX);
    }
    
    void push(int val) {
        x_stack.push(val);
        min_stack.push(min(min_stack.top(),val));
    }
    
    void pop() {
        if(!x_stack.empty()) x_stack.pop();
        min_stack.pop();
    }
    
    int top() {
        return x_stack.top();
    }
    
    int getMin() {
        return min_stack.top();
    }
};

时间复杂度:对于题目中的所有操作,时间复杂度均为 O(1)。因为栈的插入、删除与读取操作都是 O(1),我们定义的每个操作最多调用栈操作两次。

空间复杂度:O(n),其中 n 为总操作数。最坏情况下,我们会连续插入 n 个元素,此时两个栈占用的空间为 O(n)。

这道题的目的就是建立一个最小栈来辅助推出栈中的最小值。由于是栈是先进后出的原则,每次push的时候,我们要把元素push到x_stack中,然后将最小栈的栈顶元素和当前元素比较,push最小的元素,所以最小栈的栈顶始终是x_stack中的最小元素。


http://www.kler.cn/news/343675.html

相关文章:

  • react中的重定向Redirect
  • windows C++-在启用 COM 的应用程序中使用并发(一)
  • 为什么云服务器加了安全组端口还是无法访问?
  • vscode gitlens收费破解
  • poi通过在word中写入了表格,通过libreoffice转换成PDF后,word中刚才画的表格宽度无限拉伸问题的解决。
  • 基于微信小程序的家校联动平台管理系统的设计与实现(毕业论文)
  • 思维链ChatGPT
  • windows server 2019中安装.net framework 3.5功能出错
  • [AWS云]kafka调用和创建
  • leetcode15:三数之和
  • R语言统计分析——气泡图
  • 100套深度学习毕业设计项目合集【含源码 + 操作文档】
  • 笔试强训day37
  • 基于华为云智慧生活生态链设计的智能鱼缸
  • cronet的119.0.6045.31版本支持arm编译
  • stm32通过RS485总线控制云台运动
  • linux中的bootfs vendorfs rootfs userfs的作用
  • 单片机教案 2.2 ATmega2560单片机闪烁灯的制作和编程
  • 从零学编程-C语言-第17天
  • 嵌入式面试——FreeRTOS篇(四) 信号量