定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

2023-11-13

 

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

分析:使用双栈实现。一个数据栈data,一个最小栈min.数据栈存正常入栈的元素,最小栈永远存数据栈中当前最小值。具体是依靠以下规则来实现的。入栈时无论如何先给数据栈入栈,而此时看入栈的元素与最小栈栈顶元素的大小,如果该元素小于等于最小栈栈顶元素,就将该元素也给最小栈入栈,否则说明要入栈的元素大于当前最小栈的栈顶元素,则不用更新当前最小栈栈顶元素,因此为了保持与数据栈的元素个数相等,最小栈将其栈顶元素再入一次,表明此时最小元素还是原来的数据;出栈时两个栈同时出,因为要保持数据个数一致,当要找当前最小元素时,直接从最小栈的栈顶弹出元素即可。

stack<int> Mmin;//最小栈
        stack<int> data;//数据栈
    
        //入栈
        void push(int value) {
        data.push(value);//无论怎样,数据栈首先入栈
        
        //当最小栈为空,或者要入的元素<最小栈栈顶,则给最小栈入栈
        if(Mmin.empty() || value<=Mmin.top())
        {
            Mmin.push(value);
        }
        else//大于等于就入最小栈原来栈顶元素
        {
            Mmin.push(Mmin.top());
        }
    }
    //出栈
    void pop() {
        //保证两个栈都不为空
        if(!data.empty() && !Mmin.empty())
        {
            //两个栈都出栈
            data.pop();
            Mmin.pop();
        }
    }
    //最小元素(直接就是最小栈的栈顶)
    int top() {
        return data.top();
    }
    int min() {
      return Mmin.top();
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 的相关文章

  • 剑指 Offer 39. 数组中出现次数超过一半的数字(java+python)

    数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 你可以假设数组是非空的 并且给定的数组总是存在多数元素 示例 1 输入 1 2 3 2 2 2 5 4 2 输出 2 限制 1 lt 数组长度 lt 50000 java cla
  • Acwing-对称的二叉树

    除了根节点都有一个性质 自己对应的节点是相同的 并且左右儿子 左右和右左分别对称 即根节点的左右两棵子树 每一棵都是左右对称的 Definition for a binary tree node struct TreeNode int va
  • 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 68 I 二叉搜索树的最近公共祖先 1 递归解法 终止条件 当 root 为空时 返回 None 当 p q 都在 root 的右子树中 则开启递归 root right 并返回 否
  • 面试题 31:连续子数组的最大和(滴滴的“连续最大和”)

    刚才在笔滴滴的测试开发 编程题第一个就是求连续子数组的最大和问题 这个题在 剑指offer 也有这么一道题 题目描述如下 输入一个整型数组 数组里有正数也有负数 数组中一个或连续多个的多个整数组成一个子数组 求所有子数组的和的最大值 要求时
  • 剑指 Offer 11. 旋转数组的最小数字(java+python)

    把一个数组最开始的若干个元素搬到数组的末尾 我们称之为数组的旋转 给你一个可能存在 重复 元素值的数组 numbers 它原来是一个升序排列的数组 并按上述情形进行了一次旋转 请返回旋转数组的最小元素 例如 数组 3 4 5 1 2 为 1
  • 剑指 Offer 48. 最长不含重复字符的子字符串(java+python)

    请从字符串中找出一个最长的不包含重复字符的子字符串 计算该最长子字符串的长度 示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符
  • 字符串04--左旋转字符串

    字符串04 左旋转字符串 jz43 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 汇编语言中有一种移位指令叫做循环左移 ROL 现在有个简单的任务 就是用字符串模拟这个指令的运算结果 对于一个给定的字符序列S 请你把其循环左
  • LeetCode-替换空格

    创建一个新的string 一边遍历原字符串的每一个字符 一边往新的字符串中写入 遇到空格替换为 20即可 class Solution public string replaceSpaces string str string res fo
  • 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java+python)

    给定一个二叉搜索树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的祖先
  • 剑指 Offer 43. 1~n 整数中 1 出现的次数

    目录 编辑 一 问题描述 二 例子 三 题目接口 四 题目解答 1 暴力解法 2 规律解法 总结 代码 一 问题描述 输入一个整数 n 求1 n这n个整数的十进制表示中1出现的次数 例如 输入12 1 12这些整数中包含1 的数字有1 10
  • 剑指offer--顺时针打印矩阵

    题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如 如果输入如下矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 2 3 4 8 12 16 15 14 13
  • 【剑指Offer】(字符串)左旋转字符串(翻转操作)

    题目链接 https www nowcoder com practice 12d959b108cb42b1ab72cef4d36af5ec tpId 13 tqId 11196 tPage 1 rp 1 ru ta coding inter
  • 剑指offer Java实现 第五题

    第五题 请实现一个函数 将一个字符串中的每个空格替换成 20 例如 当字符串为We Are Happy 则经过替换之后的字符串为We 20Are 20Happy 实现代码 public static String replaceSpace
  • Acwing-二叉树的镜像

    遍历树中的所有点 每次遍历完之后把左右儿子swap一下 Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeN
  • 剑指 Offer 55 - I. 二叉树的深度(java+python)

    输入一棵二叉树的根节点 求该树的深度 从根节点到叶节点依次经过的节点 含根 叶节点 形成树的一条路径 最长路径的长度为树的深度 例如 给定二叉树 3 9 20 null null 15 7 3 9 20 15 7 返回它的最大深度 3 提示
  • LeetCode-用两个栈实现队列

    注意 将栈stk移动到栈cache后 还得移动回来 否则会破坏先进先出的特性 class MyQueue public stack
  • LeetCode-斐波那契数列

    class Solution public int Fibonacci int n if n 0 return 0 if n 1 return 1 return Fibonacci n 1 Fibonacci n 2 int a 0 b 1
  • 剑指Offer 22. 链表中倒数第k个节点(Easy)/ 19. 删除链表的倒数第 N 个结点(Medium)/ ListNode调用!!!

    LeetCode 19 删除链表的倒数第 N 个结点 Medium 题目链接 题解 链表中倒数第 k 个节点 双指针 清晰图解 思路 代码 Definition for singly linked list class ListNode d
  • 剑指Offer 12—矩阵中的路径

    题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 返回 true 否则 返回 false 单词必须按照字母顺序 通过相邻的单元格内的字母构成 其中 相邻 单元格是那些水平相邻
  • 剑指Offer(牛客网)-数据流中的中位数

    题目来源 https www nowcoder com practice 9be0172896bd43948f8a32fb954e1be1 tpId 13 tqId 11216 tPage 4 rp 4 ru ta coding inter

随机推荐

  • 模型/视图编程

    模型 视图编程 模型 视图编程 模型 视图 委托 模型 视图编程 Qt中的模型 视图架构用来实现大量的数据存储 处理及显示 MVC Model View Controller 包括了3个组件 模型 Model 是应用对象 用来表示数据 视图
  • Lotus Domino Notes表单,页面,视图,文档,域之间的关系

    1 表单 Form 关系型数据库里的 表设计 关系型数据库中通过表设计来定义这张Table上会有哪些字段 字段的类型以及长度等 然后通过Table来创建符合这个Table定义的记录 Record 通常情况下 Lotus通过表单 Form 来
  • Micropython史上最友好的编辑器,小巧精悍

    Python 因为非常好学 易上手故而广受大众的喜欢 micropython 也因此在物联网单片机领域拥有一席之位 并且 python 有着良好的生态环境 功能亦更加丰富 from machine import Pin p0 Pin 0 P
  • 购物商城---SpringMVC拦截器的使用

    springmvc front xml
  • spring data jpa

    Spring Data是什么 Spring Data是一个用于简化数据库访问 并支持云服务的开源框架 其主要目标是使得对数据的访问变得方便快捷 并支持map reduce框架和云计算数据服务 Spring Data 包含多个子项目 Comm
  • 深度学习中矩阵求导公式整理

    深度学习中矩阵求导公式整理 1 两种布局约定方式 2 矩阵求导的类型 3 标量对标量求导 4 向量对标量求导 5 矩阵对标量求导 6 标量对向量求导 7 向量对向量求导 8 标量对矩阵求导 参考文献 1 两种布局约定方式 布局 Layout
  • 机试算法题-敲击计数器

    题目 设计一个敲击计数器 使它可以统计在过去 5 分钟内被敲击次数 即过去 300 秒 您的系统应该接受一个时间戳参数 timestamp 单位为 秒 并且您可以假定对系统的调用是按时间顺序进行的 即 timestamp 是单调递增的 几次
  • CVPR 2022

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 转载自 集智书童 On the Integration of Self Attention and Convolution 论文 https arxiv org abs
  • 回溯算法-----473. 火柴拼正方形&&698. 划分为k个相等的子集

    分享两个回溯算法解决的算法题 和自己以往做这类题目的思路不同 导致这里卡了很久 不得不花几个小时总结一下 火柴拼正方形 首先展示一下自己一开始的回溯算法的解决方式 其实这个也是自己进行了优化之后的 没有优化之前是超时的 public boo
  • 如何导出存储过程、函数、包和触发器的定义语句?如何导出表和索引的创建语句?...

    Oracle中如何导出存储过程 函数 包和触发器的定义语句 如何导出表的结构 如何导出索引的创建语句 QQ群里有人问 如何导出一个用户下的存储过程 麦苗答 方法有多种 可以使用DBMS METADATA GET DDL包 使用PL SQL
  • Java实现质数筛的三种方法

    今天在做一个算法题的时候遇到一个需要求质数的情况 但是本人比较菜只会暴力做法 所以在此记录学习一下质数筛选除了暴力以外的其它做法 注意 一个大于1的自然数 除了1和它自身外 不能被其他自然数整除的数叫做质数 题目 暴力做法 直接根据定义写一
  • docker stats 命令详解

    docker stats 显示容器资源的使用情况 包括 CPU 内存 网络 I O 等 docker stats OPTIONS CONTAINER OPTIONS 说明 all a 显示所有的容器 包括未运行的 format 指定返回值的
  • [NKCTF2023]web/misc/blockchain-wp

    总体体验还是不错的 感谢我的二进制队友带我 WEB babyphp Pop链 链子 destruct gt toString gt invoke 最后要绕一个正则匹配 通过dir命令发现flag在 f1ag中 利用剩下没被过滤的通配符进行匹
  • OpenWRT路由器中监控网络服务并重启的脚本

    转载地址 http jamesqi com E5 8D 9A E5 AE A2 OpenWRT E8 B7 AF E7 94 B1 E5 99 A8 E4 B8 AD E7 9B 91 E6 8E A7 E7 BD 91 E7 BB 9C
  • 删除链表中重复的节点(Java实现)

    问题描述 在一个排序的链表中 存在重复的结点 请删除该链表中重复的结点 重复的结点不保留 返回链表头指针 例如 链表1 gt 2 gt 3 gt 3 gt 4 gt 4 gt 5 处理后为 1 gt 2 gt 5 解决方案 注意边界即可 代
  • UE4_UATHelper: Packaging (Windows (64-bit)): ERROR: Failed to copy

    在项目中引用了开发的插件 插件中引用了第三方库 目录结构如下 报错信息如下 UATHelper Packaging Windows 64 bit ERROR Failed to copy E Project WorkSpace KafkaD
  • 知识图谱(Knowledge Graph)

    这篇文章的目的就是给不了解知识图谱的人做一个简单的科普 一 什么是知识图谱 知识图谱 Knowledge Graph 又称为科学知识图谱 在图书情报界称为知识域可视化或知识领域映射地图 是显示知识发展进程与结构关系的一系列各种不同的图形 用
  • Sqlilabs-19

    第 19 关跟第 18 关类似 User Agent 改成了 Referer 改造注入 Referer 浏览器向 WEB 服务器表明自己是从哪个网页 URL 获得 点击 当前请求中的网址 URL 同样的 这一关对 usernanme 和 p
  • 关闭占用某个端口的进程,例如8080

    问题 Web server failed to start Port 8080 was already in use 办法一 1 查看端口号的进程号 netstat ano findstr 端口号 2 任务管理器关闭 办法二 使用命令关闭
  • 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    题目 定义栈的数据结构 请在该类型中实现一个能够得到栈中所含最小元素的min函数 时间复杂度应为O 1 分析 使用双栈实现 一个数据栈data 一个最小栈min 数据栈存正常入栈的元素 最小栈永远存数据栈中当前最小值 具体是依靠以下规则来实