D59|单调栈进阶版

news2024/11/16 17:59:56

503.下一个更大元素II

1.题目
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。

2.实现
循环遍历,建议不要延长数组,只需延长遍历长度,通过取余来取值

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        # 无需延长数组,只需延长遍历长度再取余即可
        nums.extend(nums)
        n = len(nums)
        stack = []
        res = [-1] * int(n / 2)
        for i in range(n):
            while stack and nums[stack[-1]] < nums[i]:
                index = stack.pop()
                index = index % (n // 2)
                if res[index] == -1:
                    res[index] = nums[i]
            stack.append(i)
        return res

42. 接雨水

1.题目
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述
2.实现
思路:从行和列两个方向来求解,重点是如何计算雨水的面积

class Solution:
    def trap(self, height: List[int]) -> int:
        # 用dp方法记录每个柱子的 左最高 和 右最高
        # n = len(height)
        # if n < 3: return 0
        # lheight, rheight = [0] * n, [0] * n
        # lheight[0], rheight[n - 1] = height[0], height[n - 1]
        # for i in range(1, n):
        #     lheight[i] = max(height[i], lheight[i - 1])
        # for j in range(n - 2, -1, -1):
        #     rheight[j] = max(height[j], rheight[j + 1])
        # res = 0
        # for i in range(1, n - 1):
        #     res += (min(lheight[i], rheight[i]) - height[i])
        # return res

        # 用单调栈的方法
        n = len(height)
        stack = []
        res = 0
        for i in range(n):
            if stack and height[stack[-1]] == height[i]:
                stack.pop()
            elif stack and height[stack[-1]] < height[i]:
                while stack and height[stack[-1]] < height[i]:
                    index = stack.pop()
                    if stack:
                        h = min(height[i], height[stack[-1]]) - height[index]
                        w = i - stack[-1] - 1
                        # print(res)
                        res += (h * w)
            stack.append(i)
        return res

小结:
单调栈的顺序 决定栈内元素记录的是 左右两边与他的大小关系 的类型
如该题:
在这里插入图片描述
栈内遵循:从栈头到栈底为递增顺序
则对于 1 来说,当更新栈内元素时,对于栈顶元素 1 来说,2 是左边第一个比他大的元素,3 是右边第一个比他大的元素;
如果顺序变为递减顺序,则得出相反结论。

拓展习题:
84. 柱状图中最大的矩形 要去二刷哦!

文章讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node.js+uni计算机毕设项目“宠到家”宠物领养小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

“千万别奶睡,以后很难戒”,宝宝为啥喜欢奶睡,真有这么可怕?

我还记得懒妈妈哺乳的时候&#xff0c;身边有一个“过来人”提醒&#xff1a;不要奶睡&#xff0c;否则以后就戒不掉了&#xff0c;宝宝会一直吃着睡觉。事实上&#xff0c;当时懒惰的母亲更抗拒这种说法&#xff0c;主要原因是哄睡更困难&#xff0c;每天花更多的时间哄睡觉&a…

《C++程序设计原理与实践》笔记 第8章 函数相关的技术细节

在本章和下一章中&#xff0c;我们将注意力从程序设计转移到主要的编程工具——C语言上。我们会介绍一些语言的技术细节&#xff0c;来给出一个C的基本功能的稍宽的视角&#xff0c;并从更系统化的角度讨论这些功能。 8.1 技术细节 程序设计(programming)&#xff08;即如何用…

Podman QuickStart

Install Install Link brew install podman podman machine init podman machine startpodman machine init --cpus4 --disk-size64 --memory6144 podman machine start podman-machine-default开启和关闭root 权限 Tips: 切换root 模式前后&#xff0c;相互看不到对方模式下…

vue学习笔记(七)-vue3新特性

概念 vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/releases/tag/v3.0…

C#实现QQ窗体功能

C#实现QQ窗体功能案例简述预备知识导图功能结构知识点分析C#基础知识Windows系统知识控件和组件案例简述 通过C#使用类似QQ窗体的功能&#xff0c;当窗体放置到屏幕的边缘&#xff0c;可以将窗体隐藏&#xff0c;当鼠标再次放置到屏幕边缘时&#xff0c;窗体可再次显示。 预备…

我的MEM管理类研究生,在路上

——生死看淡&#xff0c;不服就干。 一直怀揣着研究生梦的我&#xff0c;当年没能保研&#xff0c;也没能认真考研&#xff0c;在考取国家中级软件师证书后&#xff0c;意外发现了MEM&#xff08;Master of Engineering Management &#xff09;——工程管理硕士。 2021-11-…

Git - windows下操作 SSH Key

Git - windows下操作 SSH Key 流程 SSH密钥介绍 简单说&#xff0c;SSH是一种网络协议&#xff0c;用于计算机之间的加密登录。如果一个用户从本地计算机&#xff0c;使用SSH协议登录另一台远程计算机&#xff0c;我们就可以认为&#xff0c;这种登录是安全的&#xff0c;即使…

Nature:剑桥大学的研究人员找到了终结新冠的新药了吗?

本月初&#xff08;即2022年12月5日&#xff09;&#xff0c;《Nature》杂志发布了剑桥大学Teresa Brevini等人的一篇关于新冠研究的论文。在该论文中&#xff0c;作者首先发现法尼酯 X 受体&#xff08;FXR&#xff09;能够直接调节人体的ACE2的表达。过去的研究已经表明&…

手把手教你搭建Hexo博客

导读&#xff5c;很多开发者搭建自己的博客&#xff0c;会选择现有的博客系统方案&#xff0c;比如&#xff1a;Wordpress、Hexo和Halo等。其中Hexo博客作为全静态博客&#xff0c;没有数据库、对服务器资源消耗也极低&#xff0c;而且可定制化程度极高。本文将带领各位开发者基…

【Linux】编译的四个步骤

目录 平常的使用&#xff1a; 安装软件 编写&#xff1a;vi/vim vscode 编译 执行 路径/文件名 计算机五大部件 编译四步 1.预编译&#xff08;处理#&#xff09; 2.编译&#xff08;查错&#xff0c;代码到汇编&#xff09; 3.汇编(汇编到二进制指令) 4.链接 平常的…

157. 答读者疑问:为什么我的 manifest.json 文件无法正确被加载?

有教程的读者向我提问:已经完成了下列两个步骤的学习: SAP UI5 应用开发教程之十 - 什么是 SAP UI5 应用的描述符 DescriptorSAP UI5 应用开发教程之一百三十三 - SAP UI5 应用元数据文件 manifest.json 的加载和解析原理讲解自己本地 Visual Studio Code 开发了一个 SAP UI5…

SpringBoot+Mybatis-Plus+Thymeleaf+Bootstrap分页查询(前后端完整版开源学习)图书管理系统

目录分页主要逻辑&#xff0c;在3.7和3.81.准备工作1.1 参考博客1.2 项目结构2. 数据库3. 详细代码部分3.1 pom依赖3.2 application.yml3.3 BookMapper.xml3.4 BookMapper3.5 BookService 和 BookServiceImpl3.6 实体类entity book3.7控制层 BookController3.8 前端页面bookLis…

猿如意使用测评

本篇博客会记录使用猿如意这款产品的整体使用感受和相关建议&#xff0c;可以作为新人上手这款产品的参考 1. 猿如意的官方介绍 首先是官方对这款产品的介绍 猿如意是一款面向开发者的辅助开发工具箱&#xff0c;包含了效率工具、开发工具下载&#xff0c;教程文档&#xff0…

4.7 深入理解Spring

4.7.1 Spring 4.7.1.1 Spring模块 Spring 由七大模块组成&#xff0c;分别是 数据模块&#xff08;Data Access / Integration&#xff09;Web模块切面模块&#xff08;Aop&#xff0c;Aspects&#xff09;工具模块(Instrumentation)消息模块核心模块测试模块Spring模块4.7.…

08-09-Zookeeper客户端使用与经典应用场景

Zookeeper 集群模式&#xff1a; Zookeeper 集群模式一共有三种类型的角色 Leader: 处理所有的事务请求&#xff08;写请求&#xff09;&#xff0c;可以处理读请求&#xff0c;集群中只能有一个Leader Follower&#xff1a;只能处理读请求&#xff0c;同时作为 Leader的候选节…

实现 effect reactive 依赖收集 触发依赖

03_01_实现 effect & reactive & 依赖收集 & 触发依赖 一、reactivity happy path 首先我们知道reactivity的happy path&#xff08;核心逻辑&#xff09;就是: 通过reactive定义响应式变量&#xff0c;然后通过effect去收集响应式变量的依赖&#xff0c;然后实现…

20221225英语学习

今日新词 giant adj.巨大的&#xff1b;超群的 appreciate v.欣赏&#xff0c;赏识&#xff1b;感激&#xff1b;理解&#xff0c;意识到&#xff1b;增值 invasive adj.侵入的&#xff0c;侵略的&#xff1b;开刀的 dispel vt.驱散&#xff0c;驱逐&#xff1b;消除 equa…

【2008NOIP普及组】T4. 立体图 试题解析

【2008NOIP普及组】T4. 立体图 试题解析 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 778 通过数: 542 【题目描述】 小渊是个聪明的孩子,他经常会给周围的小朋友讲些自己认为有趣的内容。最近,他准备给小朋友讲解立体图,请你帮他画出立体图。 小渊有一块面…

Windows下安装RabbitMQ

目录 安装Erlang环境 下载地址&#xff1a;https://erlang.org/download/ 下载后直接双击.exe安装即可。 安装完成后&#xff0c;创建环境变量。 安装完成后创建一个名叫ERLANG_HOME的环境变量&#xff0c;其指向erlang的安装目录&#xff1b; 将%ERLANG_HOME%\bin加入到Pa…