码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【无标题】


    单调栈

    具体题目

    1. leetcode 84. 柱状图中最大的矩形
    2. leetcode 42. 接雨水

    算法用途

    可以在O(N)时间内找到一组数中的每一个数最近的小于它的数。
    比如3,5,6,4,1,8
    5左边第一个小于它的数是3
    6左边第一个小于它的数是5
    4左边第一个小于它的数是3
    1左边第一个小于它的数没有
    8左边第一个小于它的数是1

    单调栈算法可以在O(N)时间内求出答案 3,5,3,null,1

    算法描述

    算法思想

    单调栈在遍历过程中不断压入符合单调性的元素,如果有一个元素X能破坏单调栈内的单调性,则从单调栈中弹出若干元素。弹出这些元素后再压入元素X,单调栈内能维持单调性。一般弹出元素的过程就是执行动作的过程。

    算法原理

    如果j0num[j1],那么对于任意一个后面的数num[i],(i>j1)。小于num[i]的数一定不会是num[j0],(如果num[j1]小于num[i],那么答案可能为num[j1]。j1比j0更接近i。如果num[j1]>num[i],那么num[j0]也一定大于num[i],而我们要找的是第一个小于num[i]的数,所以这种情况下num[j0]一定不是我们寻找的数)

    算法步骤

    从左向右遍历。遍历过程中维护一个栈,栈记录的是数组的引索。

    遍历到第0个数:3。 由于栈空,引索0压栈。 意味着在3左边比3小的数不存在。
    遍历到第1个数:5。 由于5比栈顶引索对应的数字3大,引索1压栈。 意味着在5左边比5小的数是3。
    遍历到第2个数:6。 由于6比栈顶引索对应的数字5大,引索2压栈。 意味着在6左边比6小的数是5。
    遍历到第3个数:4。 由于4比栈顶引索对应的数字6小,引索2出栈; 由于4比栈顶引索对应的数字5小,引索1出栈。 由于4比栈顶引索对应的数字3大, 引索3压栈。意味着在4左边比4小的数是3。而且由于4的存在,比他它的数5和6不会成为后面遍历的数的答案。
    ……

    这样,就找到了每个数左边比这个数小的数是哪个了。由于每个数最多进栈1次,出栈1次。所以遍历整个数组只需要O(n)的时间。

    算法感想

    该算法动态地判断不会成为结果的数,从而减少检索量。

  • 相关阅读:
    2023年10月【考试战报】|ORACLE OCP 19C考试通过
    项目交互-选择器交互
    【020】基于Springboot+Vue的学生成绩教务管理系统(含教师、学生、管理员身份)含源码、数据库、运行教程
    Python —— pytest框架
    临界区、临界资源、共享资源、临界调度原则
    广西桂林钢结构钣金折弯件3d扫描全尺寸偏差检测-CASAIM中科广电
    nlp入门(四)新闻分类实验
    无蓝光的护眼灯有哪些品牌?分享五款优秀的无蓝光护眼台灯
    第三十八章 构建数据库应用程序 - 处理表单提交请求
    sklearn快速入门教程:(三)机器学习的通用模式及实现方法 学习笔记
  • 原文地址:https://blog.csdn.net/ld_long/article/details/126488238
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号