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

leetcode刷题记录(八十六)——84. 柱状图中最大的矩形

(一)问题描述

84. 柱状图中最大的矩形 - 力扣(LeetCode)84. 柱状图中最大的矩形 - 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1:[https://assets.leetcode.com/uploads/2021/01/04/histogram.jpg]输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例 2:[https://assets.leetcode.com/uploads/2021/01/04/histogram-1.jpg]输入: heights = [2,4]输出: 4 提示: * 1 <= heights.length <=105 * 0 <= heights[i] <= 104https://leetcode.cn/problems/largest-rectangle-in-histogram/description/?envType=study-plan-v2&envId=top-100-liked

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

示例 2:

输入: heights = [2,4]
输出: 4

提示:

  • 1 <= heights.length <=105
  • 0 <= heights[i] <= 104

(二)解决思路

        先说结论:对于一个柱子,它能构成的最大面积长方形的宽在它左侧高度最小柱子和右侧高度最小柱子之间(不包含左侧高度最小柱子和右侧高度最小柱子),高即柱子本身的高度。

        这里采用单调栈来计算各个柱子的左边界和右边界数组。以求左边界数组为例,当栈顶元素大于当前元素时就将栈顶元素弹出,并将当前柱子的位置加入栈中。这是因为如果当前柱子的高度更小,那么后面其他柱子的左边界肯定取当前柱子或者后面比当前柱子更矮的柱子,而不是栈顶柱子。

        我一开始想到了42. 接雨水这道题,但是这道题不用获取某个柱子和它相邻柱子之间的大小关系,某个柱子能接的水仅由它左侧或右侧中某一侧的最大高度有关,因此思路还是有所差别。

class Solution {public int largestRectangleArea(int[] heights) {int n=heights.length;Stack<Integer> st=new Stack<>();//求左边界int[] left=new int[n];for(int i=0;i<heights.length;i++){while(!st.isEmpty()&&heights[i]<=heights[st.peek()]){st.pop();}left[i]=(st.isEmpty()?-1:st.peek());st.push(i);}st.clear();//求右边界int[] right=new int[n];for(int i=n-1;i>=0;i--){while(!st.isEmpty()&&heights[i]<=heights[st.peek()]){st.pop();}right[i]=(st.isEmpty())?n:st.peek();st.push(i);}int ans=0;for(int i=0;i<n;i++){ans=Math.max(ans,(right[i]-left[i]-1)*heights[i]);}return ans;}
}
http://www.lryc.cn/news/525495.html

相关文章:

  • Android GLSurfaceView 覆盖其它控件问题 (RK平台)
  • 开源鸿蒙开发者社区记录
  • 【Linux网络编程】传输层协议
  • 10个非常基础的 Javascript 问题
  • Mysql索引(学习自用)
  • eniops库中reduce函数使用方法
  • 阴沟翻船题——Longest Substring Without Repeating Characters
  • Jetpack Compose 和 Compose Multiplatform 还有 KMP 的关系
  • 微信小程序中实现背景图片完全覆盖显示,可以通过设置CSS样式来实现
  • 【0x0012】HCI_Delete_Stored_Link_Key命令详解
  • console的各种方法
  • spring boot关于系统首页自动跳转拼接到index
  • 指针生成网络(PGN)详细指南(引入)
  • 案例研究丨浪潮云洲通过DataEase推进多维度数据可视化建设
  • k8s 蓝绿发布、滚动发布、灰度发布
  • UWB原理:AOA测角原理Angel of Arrival
  • plus.runtime.install在android10无效
  • 7.C++中的函数
  • 上位机知识篇---Python数据图表可视化
  • 详解:TCP/IP五层(四层)协议模型
  • 【原生记忆能力 怎么让大模型拥有原生的记忆能力】
  • 百度APP iOS端磁盘优化实践(上)
  • qml Dialog详解
  • 2025年的校招管理系统会全面实现智能化吗?
  • 【Unity】使用Canvas Group改变UI的透明度
  • 2024年博客之星主题创作|2024年度感想与新技术Redis学习
  • 6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)
  • Unity自学之旅05
  • linux中关闭服务的开机自启动
  • Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )