返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >手把手带你了解C++最小栈
  • 573
分享到

手把手带你了解C++最小栈

2024-04-02 19:04:59 573人浏览 独家记忆
摘要

目录设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。示例: 输入: 输出: 解释: 思路总结设计一个支持 push ,pop ,top 操作,并

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

push(x) —— 将元素 x 推入栈中。

pop() —— 删除栈顶的元素。

top() —— 获取栈顶元素。

getMin() —— 检索栈中的最小元素。

示例:

输入:

[“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.

思路

c++支持的栈(原生栈),可以实现 push、pop、top(peek), 但是要获取最小元素, 一种方法是通过暴力搜索,从头到尾遍历整个,那么时间复杂度是 O(n),不是在常数级获取最小值, 不符合题目的要求。

我们可以设置两个栈,一个数据栈 datastack,用于存放需要存放的数据,一个记录最小值的栈 sortedstack。

在这里插入图片描述

每次 push 操作之后, 保存当前 push 元素之后数据栈中的最小值, 因为从第一次 push 到之后的每次 push 操作,我们知道每次 push 的值,也很容易知道当前的栈中的最小值。

在这里插入图片描述


```cpp
class MinStack {
public:
    
    //创建两个栈
    stack<int> datastack; //数据栈
    stack<int> sortedstack; //有序栈,栈底最大,栈顶最小,有<=栈顶的元素才push
    MinStack() {
    }
    void push(int val) {
        datastack.push(val); //将值push到数据栈
        //有序栈
        //当有序栈为空 或 值小于等于有序栈的栈顶 就push
        if(sortedstack.empty()||val<=sortedstack.top()) //sortedstack==sortedstack.empty() 错误
            sortedstack.push(val);
    }
    void pop() {
        if(datastack.top()==sortedstack.top())  //数据栈的栈顶 和 有序栈的栈顶 相同, 有序栈出栈
            sortedstack.pop();
        datastack.pop();  //数据栈一直在出栈
    }         
    int top() {
        return datastack.top();
    }
    int getMin() {
        return sortedstack.top();
    }
};

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 手把手带你了解C++最小栈

本文链接: https://lsjlt.com/news/133007.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 手把手带你了解C++最小栈
    目录设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。示例: 输入: 输出: 解释: 思路总结设计一个支持 push ,pop ,top 操作,并...
    99+
    2024-04-02
  • 手把手带你了解Python数据分析--matplotlib
    目录柱形图条形图折线图饼图和圆环图分离饼图块圆环图总结柱形图 bar()函数绘制柱形图 import matplotlib.pyplot as pl x = [1,2,3,4,5,6,7] y = [15,69,...
    99+
    2022-06-10
    Python Pythonmatplotlib
  • 手把手带你粗略了解Java--类和对象
    目录认识类和对象1.类、对象是什么?2.什么是面向对象?3.一个对象的产生过程是?🔺OOP语言的三大特征?类和对象的实例化类的定义:注意:实例化对象:①如何访问对象中...
    99+
    2024-04-02
  • 手把手带你了解python多进程,多线程
    目录多进程多线程线程安全高并发拷贝(多进程,多线程)总结说明 相应的学习视频见链接,本文只对重点进行总结。 多进程 重点(只要看下面代码的main函数即可) 1.创建 2.如何...
    99+
    2024-04-02
  • 手把手带你了解Angular中的依赖注入
    本篇文章带大家了解一下依赖注入,介绍一下依赖注入解决的问题和它原生的写法是什么,并聊聊Angular的依赖注入框架,希望对大家有所帮助!最近在Angular项目中经常能碰到依赖注入这个关键词,但是始终不理解它是怎么实现的,在Angular的...
    99+
    2023-05-14
    Angular.js Angular 依赖注入
  • 手把手带你搞懂C语言指针
    目录前言一、概念1.*指针2.&取址二、指针修饰符1.const 常量指针2.volatile 特征指针3.typedef 别名指针三、指针运算1. ++ -- + -2.[...
    99+
    2024-04-02
  • 手把手带你学习C++的运算符
    目录运算符01 算术运算符02 赋值运算符03 比较运算符04 逻辑运算符总结运算符 作用:用于执行代码的运算 运算符类型 ...
    99+
    2024-04-02
  • 手把手带你学习C++的数据类型
    目录数据类型01 整型:02 sizeof关键字03 实型(浮点型)04 字符型05 转义字符06 字符串型07 布尔型08 数据的输入总结 数据类型 C++规定在创建一个变量或者常...
    99+
    2024-04-02
  • Java EventBus手把手带你实现
    目录一、说明二、Guava的EventBus三、EventBus的原理四、动手实现一个EventBus4.1 定义Subscribe注解4.2 ObserverAction4.3 O...
    99+
    2023-01-09
    Java EventBus Java EventBus实现
  • 手把手带你体验Stream流
    前言只有光头才能变强。相信也有不少的同学想要知道:Lambda表达式在工作中哪个场景会用得比较多?跟Lambda搭边的,使用Stream流会比较多一般人第一次看Stream流的代码,都会有点看不懂(它的代码看起来好像就不是写Java一样.)...
    99+
    2023-06-02
  • 手把手带你了解Java-Stream流方法学习及总结
    目录前言forEach()map()map()源码:filter()filter()源码:sorted()sorted()源码:collect()collect()源码:总结前言 S...
    99+
    2024-04-02
  • 手把手带你用python爬取小姐姐私房照
    目录如何用Python搞到小姐姐私房照目标站点开发环境效果预览正式教程一、第三方库安装二、爬虫的基本套路分析目标站点请求网站获取数据解析数据保存数据写在最后如何用Python搞到小姐...
    99+
    2024-04-02
  • 手把手带你用Node手写WebSocket协议
    我们知道,http 是一问一答的模式,客户端向服务器发送 http 请求,服务器返回 http 响应。这种模式对资源、数据的加载足够用,但是需要数据推送的场景就不合适了。有同学说,http2 不是有 server push 么?那只是推资源...
    99+
    2023-05-14
    前端 JavaScript Node.js
  • C语言手把手带你掌握带头双向循环链表
    目录前言带头双向循环链表的结构代码操作前言 关于链表这一块,写了多篇博客,学习了顺序表、单链表、及其一些练习题 顺序表:传送门:顺序表 单链表:传送门:单链表1  ...
    99+
    2024-04-02
  • 手把手带你开发一个node切换源小工具
    node怎么切换源?下面本篇文章带大家手搓一个node切换源小工具,希望对大家有所帮助!嗨嗨嗨,又到了写轮子环节了,为什么要写这个东西呢?应为npm自带的源下载东西灰常慢目前已经有一款工具了nrm 也是做切换源的 例如tabao源,腾讯源,...
    99+
    2023-05-14
    前端 JavaScript Node.js
  • 手把手带你在vscode中配置latex
    vscode中如何配置latex?下面本篇文章就来带大家一步步在vscode中配置latex,希望对大家有所帮助!之前一直用的是texstudio写论文,但我觉得texstudio的ui不好看,加上实际使用过程中,texstudio的工具栏...
    99+
    2023-10-22
    latex VSCode
  • 手把手带你用java搞定汉诺塔
    目录什么是汉诺塔问题剖析n=1n=2n=3小结Java代码实现代码讲解move函数hanoiTower函数附:C语言实现汉诺塔总结什么是汉诺塔 汉诺塔问题是一个经典的问题。汉诺塔(H...
    99+
    2024-04-02
  • 手把手带你进行Golang环境配置
    前言大家好,我是星期八,是一个每天都要在镜子前给自己梳仅剩三根头发的三年码农本次我们来安排一下如何在win平台上配置Go语言开发环境。整体来说,Go配置环境还是挺轻松的,和Python差不多,并且会自动添加环境变量。下载地址Go官方镜像站点...
    99+
    2023-05-14
    语言 win Go
  • 手把手带你安装多个node版本
    目录前言第一步:下载好需要安装的node程序(不要用安装包,用压缩包,这是坑,安装包安装后面再说)第二步:选择安装路径(建议安装之前卸载掉之前的node)第三步:配置环境变量第四步:...
    99+
    2024-04-02
  • 手把手带你走进Go语言之常量解析
    目录概述常量常量计算iota概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. 常量 常量 (Constant) 是指程序在执行...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作