当前位置: 首页 > news >正文

代码随想录算法训练营第60天 | 84.柱状图中最大的矩形

单调栈章节理论基础:

https://leetcode.cn/problems/daily-temperatures/

84.柱状图中最大的矩形

题目链接:https://leetcode.cn/problems/largest-rectangle-in-histogram/description/

思路:

本题双指针的写法整体思路和42. 接雨水是一致的,但要比42. 接雨水 难一些。

难就难在本题要记录记录每个柱子 左边第一个小于该柱子的下标,而不是左边第一个小于该柱子的高度。
然后右边也是找到第一个小于该柱子的高度。通过示例里的图片应该很好理解。
在这里插入图片描述

所以需要循环查找,也就是下面在寻找的过程中使用了while,详细请看下面注释,整理思路在题解:42. 接雨水 中已经介绍了。

代码:

class Solution {public int largestRectangleArea(int[] heights) {int n = heights.length;int[] minLeftIndex =  new int[n];int[] minRightIndex = new int[n];// 初始化,防止下面while死循环。以及最后的求解minLeftIndex[0] = -1;// 记录每个柱子 左边第一个小于该柱子的下标for(int i=1;i<n;i++){int left = i - 1;while(left >= 0 && heights[left] >= heights[i])left = minLeftIndex[left];minLeftIndex[i] = left;}// 初始化,防止下面while死循环minRightIndex[n-1] = n;// 记录每个柱子 右边第一个小于该柱子的下标for(int i=n-2;i>=0;i--){int right = i + 1;while(right < n && heights[right] >= heights[i])right = minRightIndex[right];minRightIndex[i] = right;}// for(int i=0;i<n;i++){//     System.out.print(minLeftIndex[i] + " ");// }// System.out.println();// for(int i=0;i<n;i++){//     System.out.print(minRightIndex[i] + " ");// }// 求和int result = 0;for(int i=0;i<n;i++){int sum = heights[i] * (minRightIndex[i] - minLeftIndex[i] -1 );result = Math.max(sum,result);}return result;}
}
http://www.lryc.cn/news/321937.html

相关文章:

  • 【讲解Node.js常用的命令】进阶版
  • 软考81-上午题-【面向对象技术3-设计模式】-行为型设计模式01
  • 【Linux进阶之路】HTTPS = HTTP + S
  • 51-31 CVPR’24 | VastGaussian,3D高斯大型场景重建
  • GPT-4引领AI新纪元,Claude3、Gemini、Sora能否跟上步伐?
  • 图书馆RFID(射频识别)数据模型压缩/解压缩算法实现小工具
  • 【Java Web基础】一些网页设计基础(三)
  • 2 使用GPU理解并行计算
  • Android什么情况下会出现内存泄漏以及怎么解决?
  • kafka集群介绍及搭建
  • 2024/03/19(网络编程·day5)
  • ​LeetCode解法汇总1969. 数组元素的最小非零乘积
  • 学习vue3第九节(新加指令 v-pre/v-once/v-memo/v-cloak )
  • 二开飞机机器人群发,实现自动给多个频道发送消息
  • AI如何支持慈善组织
  • Git如何清除账户凭证
  • 【YUNBEE云贝-PostgreSQL】FDW应用
  • Spring MVC文件上传配置
  • JavaScript高级(十八)---进程和线程,宏任务和微任务
  • How to install mongodb on redhat 7.7
  • 关于继承是怎么样的?那当然是很好理解之
  • 高可用系统有哪些设计原则
  • LeetCode-回文数
  • 50. 【Linux教程】源码安装软件
  • 《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序
  • 探究Kafka主题删除失败的根本原因
  • JavaSE(上)-Day7
  • 记录一下在Pycharm中虚拟环境的创建
  • Python从入门到精通秘籍九
  • 善于利用window挂在全局变量