代码学习记录49---单调栈

ops/2024/9/19 13:08:29/ 标签: 学习, 动态规划, 算法, java

随想录日记part49

t i m e : time: time 2024.04.20



主要内容:今天开始要学习单调栈的相关知识了,今天的内容主要涉及:柱状图中最大的矩形

  • 84.柱状图中最大的矩形


Topic184.柱状图中最大的矩形

题目:
在这里插入图片描述

思路:

代码实现如下:

java">class Solution {public int largestRectangleArea(int[] heights) {// 双指针法int result = 0;int len = heights.length;int[] left = new int[len];int[] right = new int[len];left[0] = -1;for (int i = 1; i < len; i++) {int t = i - 1;while (t >= 0 && heights[t] >= heights[i])t = left[t];left[i] = t;}right[len - 1] = len;for (int i = len - 2; i >= 0; i--) {int t = i + 1;while (t < len && heights[t] >= heights[i])t = right[t];right[i] = t;}for (int i = 0; i < len; i++) {int tem = heights[i] * (right[i] - left[i] - 1);result = Math.max(tem, result);}return result;}
}

时间复杂度 O ( n ) O(n) O(n)
空间复杂度 O ( n ) O(n) O(n)



Topic2 接雨水

在这里插入图片描述

思路:

与接雨水很像

java">class Solution {public int largestRectangleArea(int[] heights) {int result = 0;int len = heights.length;int[] newheights = new int[len + 2];newheights[0] = 0;newheights[len + 1] = 0;for (int i = 0; i < len; i++) {newheights[i + 1] = heights[i];}heights = newheights;Stack<Integer> stack = new Stack<>();stack.push(0);for (int i = 1; i < len + 2; i++) {if (heights[i] > heights[stack.peek()]) {stack.push(i);} else if (heights[i] == heights[stack.peek()]) {stack.pop();stack.push(i);} else {while (!stack.isEmpty() && heights[i] < heights[stack.peek()]) {int mid = stack.pop();if (!stack.isEmpty()) {int h = heights[mid];int w = i - stack.peek() - 1;result = Math.max(h * w, result);}}stack.push(i);}}return result;}
}class Solution {public int trap(int[] height) {// 双指针法int result = 0;int len = height.length;for (int i = 0; i < len; i++) {if (i == 0 || i == len - 1)continue;int lheight = height[i];int rheight = height[i];for (int l = i - 1; l >= 0; l--) {lheight = Math.max(lheight, height[l]);}for (int r = i + 1; r < len; r++) {rheight = Math.max(rheight, height[r]);}int tem = Math.min(rheight, lheight) - height[i];if (tem > 0)result += tem;}return result;}
}

时间复杂度 O ( n ) O(n) O(n)
空间复杂度 O ( n ) O(n) O(n)


http://www.ppmy.cn/ops/7869.html

相关文章

社区论坛小圈子小程序源码系统:自定义小程序管理社区圈子软件圈子系统系统开发-做社区圈子丨圈子论坛社区交友系统开源版小程序源码丨

简述 移动互联网的快速发展&#xff0c;微信小程序作为一种新型的应用形态&#xff0c;已经深入到人们的生活中。特别是对于社区论坛类应用&#xff0c;小程序版本可以更好地满足用户快速、便捷获取信息的需求。下面给大家分享一款社区论坛小圈子小程序源码系统。 在这个信息…

【剪映专业版】17高质量视频如何导出

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 1.导出 目的&#xff1a;导出高质量的视频 如果没有音频及字幕的情况下&#xff0c;音频导出和字幕导出为灰色 2.视频导出 超清&#xff1a;1080P 注意&#xff1a;如果原始素材的分辨率为小于1080P&#xff0c;如果导…

数据结构10:堆和堆排序

文章目录 树的概念及结构树的概念树的相关概念树的表示树在实际中的应用表示文件系统的目录树结构 二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构顺序存储链式存储 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构 堆的实现堆的插入堆的删除堆的创建向…

研究生,该学单片机还是plc。?

PLC门槛相对较低&#xff0c;但是在深入学习和应用时&#xff0c;仍然有很高的技术要求。我这里有一套单片机入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习单片机&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&am…

写一个函数实现:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放)之解法改写

#include<stdio.h> void change(int *p){ int i,j,temp; int *pmax,*pmin; // 初始化最大值和最小值的指针 pmaxp; pminp; // 遍历矩阵&#xff0c;寻找最大和最小值 for(i0;i<5;i) for(ji;j<5;j) { if(*pm…

nginx开启basic认证

basic认证也叫做http基本认证&#xff0c;防止恶意访问 首先用在线网站生成一个叫做htpasswd的账号密码文件。 将生成结果复制到/etc/nginx/htpasswd文件中 在server的location中配置 server { listen 80; server_name a.com;location / { root html;index index.…

UE5 C++ 对项目工程的再认识

一.Intermediate 中间文件Intermediate&#xff0c;涉及到反射。胶水文件&#xff0c;与代码产生关联。通过Generate生成出来。 1.C#编译出第三方文件&#xff1a; 反射文件 头文件关联&#xff0c;UHT里的文件.h cpp的关联&#xff0c;UE将所有的cpp放到 gen.cpp里,实现自动关…

Python第四次作业

主程序 import MyTriangles1 float(input("请输入边长1:")) s2 float(input("请输入边长2:")) s3 float(input("请输入边长3:"))r MyTriangle.isvalid(s1, s2, s3) if r:a MyTriangle.area(s1, s2, s3)print("面积为&#xff1a;&quo…

es6编程风格

目录 1、变量let和常量const 2、静态字符串与动态字符串 3、解构赋值&#xff08;数组&#xff0c;对象&#xff09; 4、对象 5、数组 6、函数 7、Map结构 8、class类 9、模块 10、ESLint的使用 1、变量let和常量const ES6 提出了两个新的声明变量的命令&#xff1a;…

数据结构--图

图 1.图的基本介绍 1&#xff09;图的定义&#xff1a; 图(Graph)G由两个集合V和E组成&#xff0c;记为G(V, E)&#xff0c;其中V是顶点的有穷非空集合&#xff0c;E是V中顶点偶对的有穷集合&#xff0c;这些顶点偶对称为边。V(G)和E(G)通常分别表示图G的顶点集合和边集合&a…

javascrip中的class

在JavaScript中&#xff0c;class是一种用于创建对象的模板或蓝图。它是ES6引入的一种语法糖&#xff0c;用于简化对象的创建和继承过程。下面是一个示例代码&#xff0c;详细说明了JavaScript中class的使用&#xff1a; javascript class Animal { constructor(name, age) …

Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)

Android优化RecyclerView图片展示&#xff1a;Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas&#xff0c;Kotlin&#xff08;b&#xff09; 对 Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView&#xff0c;Kotlin&#xff08;a&#xff09;-…

Linux配置腾讯云yum源(保姆级教学)

1. 备份原有的 yum 源配置文件 例如&#xff1a; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 下载腾讯云的 yum 源配置文件 例如&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/…

python爬虫(Selenium案列)第二十四

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

go处理json

在 Go 中&#xff0c;你可以使用内置的 encoding/json 包来处理 JSON 格式数据。该包提供了函数和类型&#xff0c;使你能够将 JSON 数据解析为 Go 对象&#xff08;反序列化&#xff09;或将 Go 对象转换为 JSON 数据&#xff08;序列化&#xff09;。 下面是一些常见的 JSON…

ubuntu22安装宝塔面板

方法一&#xff1a;运行安装宝塔命令 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 安装成功后&#xff0c;需到服务器管理后台的安全组中配置新规则&#xff0c;放行宝塔面板的端口&#xff08;以阿…

从IoTDB的发展回顾时序数据库演进史

面向工业物联网时代&#xff0c;以 IoTDB 为代表的时序数据库加速发展。 时序数据的主要产生来源之一是设备与传感器&#xff0c;具有监测点多、采样频率高、存储数据量大等多类不同于其他数据类型的特性&#xff0c;从而导致数据库在实现高通量写入、存储成本、实时查询等多个…

【Kyuubi】Apache Kyuubi 1.8 特性解读

Apache Kyuubi 1.8 特性解读 1.Apache Kyuubi 简介2.场景扩展 —— 在线分析&#xff0c;离线跑批3.流式增强 —— 流批一体&#xff0c;面向未来4.企业特性 —— 行业沉淀&#xff0c;持续打磨5.开源社区 —— 开放包容&#xff0c;合作共赢 本文来自于 Apache Kyuubi PMC Mem…

.NET Core中间件管道MAP的作用和使用

在ASP.NET Core中&#xff0c;中间件是构建HTTP请求管道的基本组件。中间件组件负责在ASP.NET Core应用程序中处理请求和响应。中间件可以执行多种任务&#xff0c;例如身份验证、记录、异常处理等。你可以按顺序将多个中间件组件组合在一起&#xff0c;形成一个请求处理管道。…

Linux - Docker 安装 Nacos

拉取 Nacos 镜像 使用以下命令从 Docker Hub 拉取最新版本的 Nacos 镜像&#xff1a; docker pull nacos/nacos-server启动 Nacos 容器 使用以下命令启动 Nacos 容器&#xff1a; docker run -d \--name nacos \--privileged \--cgroupns host \--env JVM_XMX256m \--env M…