news 2026/4/23 15:29:56

A.每日一题——85. 最大矩形

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
A.每日一题——85. 最大矩形

题目链接:85. 最大矩形(困难)

算法原理:

博主声明:这84题和85题感谢灵神🌹🌹🌹的启发,我在灵神的思路上产生自己的想法,因此自己纯手敲了一遍,写博客分享于此~

解法:直接用84题的代码解决

2ms击败100.00%

时间复杂度O(MN)

这题就是84题的进阶版,大家可以先看看我的84题博客👇回过头再看这题就超easy!

A.每日一题——84. 柱状图中最大的矩形

对于此题,假设矩阵一共m行,咱枚举矩形的底边,做m次84题即可

以第一行为底的柱子高度:[1,0,1,0,0],最大矩形面积=1

以第二行为底的柱子高度:[2,0,2,1,1],最大矩形面积=3

以第三行为底的柱子高度:[3,1,3,2,2],最大矩形面积=6

以第四行为底的柱子高度:[4,0,0,3,0],最大矩形面积=4

最终结果就是max(1,3,6,4)=6

Java代码:

class Solution { public int maximalRectangle(char[][] matrix) { int n=matrix[0].length; //这里申请n+1个空间大小,是因为84题的代码涉及到了right=n的情况,为了避免越界访问,所以初始化成为n+1 //实际上初始化成n也可以,因为right=n时会直接赋值h=-1,完全不访问height[n] int[] heights=new int[n+1]; int ret=0; for(char[] row:matrix){ //计算底边为row的柱子高度 for(int j=0;j<n;j++){ if(row[j]=='0') heights[j]=0; else heights[j]++; } //直接调用84题代码 ret=Math.max(ret,largestRectangleArea(heights)); } return ret; } //直接把84题的代码原封不动搬过来用 private int largestRectangleArea(int[] heights) { int n=heights.length; int[] st=new int[n+1]; //当栈中只有一个数的时候,栈顶下面的数是-1,对应left[i]=-1的情况 int top=-1;//记录栈顶下标,初始为-1表示栈为空 //初始化栈底为-1,对应left=-1的情况 st[++top]=-1; int ret=0; //遍历范围[0,n]:n是right的边界,对应right=n的情况 for(int right=0;right<=n;right++){ int h=right<n?heights[right]:-1; //top>0:保证栈内除了-1还有有效元素 while(top>0&&heights[st[top]]>=h){ //弹出栈顶元素i:这是当前要计算面积的柱子下标 int i=st[top--]; //弹出后的栈顶就是i紧接着左侧的第一个更矮柱子下标 int left=st[top]; ret=Math.max(ret,heights[i]*(right-left-1)); } //将当前right压入栈,维持栈的单调递增性质 //因为此时咱们的基准柱子变成了从栈中弹出来的柱子,比基准柱子小的两个都去当left和right了,比它大的才放进去,所以是递增的 st[++top]=right; } return ret; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:19:58

【计算机大数据毕业设计选题推荐】基于Spark+Django的健康饮食营养数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘

✍✍计算机毕设指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡有什么问题可以…

作者头像 李华
网站建设 2026/4/23 9:56:16

2026必备!9个一键生成论文工具,助本科生轻松搞定毕业论文!

2026必备&#xff01;9个一键生成论文工具&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具如何改变论文写作的未来 随着人工智能技术的飞速发展&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。尤其是在当前 AIGC&#xff08;人工智能生成内容&am…

作者头像 李华
网站建设 2026/4/23 11:18:38

【滤波跟踪】弹道目标状态估计仿真系统,通过扩展卡尔曼滤波EKF和无迹卡尔曼滤波UKF对含空气阻力的弹道目标(状态包括高度、速度、弹道系数)进行状态估计附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

作者头像 李华
网站建设 2026/4/23 9:57:38

OBS面部追踪插件终极指南:从入门到精通

OBS面部追踪插件终极指南&#xff1a;从入门到精通 【免费下载链接】obs-face-tracker Face tracking plugin for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-face-tracker 想要让直播画面更加专业动人&#xff1f;OBS面部追踪插件正是您需要的利器&a…

作者头像 李华
网站建设 2026/4/23 7:04:05

【计算机毕设推荐】健康饮食大数据分析系统,Python+Django+Spark技术栈 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡如果你遇到具体的…

作者头像 李华