题目要求

给定 n 个非负整数,用来表示柱状图中各个柱子的高度,并且每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。

  • 以下是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
  • 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。如下:

  • 示例:
 输入: [2,1,5,6,2,3]输出: 10
//柱状图中最大矩形//枚举宽,固定一边枚举另一边,然后计算面积
class Solution {
public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();int ans = 0;// 枚举左边界for (int left = 0; left < n; ++left) {int minHeight = INT_MAX;// 枚举右边界for (int right = left; right < n; ++right) {// 确定高度minHeight = min(minHeight, heights[right]);// 计算面积ans = max(ans, (right - left + 1) * minHeight);}}return ans;}
};//枚举高
class Solution {
public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();int ans = 0;for (int mid = 0; mid < n; ++mid) {// 枚举高int height = heights[mid];int left = mid, right = mid;// 确定左边界,取左边界最高的那个while (left - 1 >= 0 && heights[left - 1] >= height) {--left;}// 确定右边界,取右边界最高的那个while (right + 1 < n && heights[right + 1] >= height) {++right;}// 计算面积ans = max(ans, (right - left + 1) * height);}return ans;}
};//单调栈
func largestRectangleArea(heights []int) int {n := len(heights)left, right := make([]int, n), make([]int, n)//栈mono_stack := []int{}//取左边的第一个小于当前的for i := 0; i < n; i++ {//栈顶元素大于或等于当前元素就出栈for len(mono_stack) > 0 && heights[mono_stack[len(mono_stack)-1]] >= heights[i] {//出栈mono_stack = mono_stack[:len(mono_stack)-1]}if len(mono_stack) == 0 {left[i] = -1} else {left[i] = mono_stack[len(mono_stack)-1]}mono_stack = append(mono_stack, i)}//取右边的第一个小于当前的mono_stack = []int{}for i := n - 1; i >= 0; i-- {//栈顶元素大于或等于当前元素就出栈for len(mono_stack) > 0 && heights[mono_stack[len(mono_stack)-1]] >= heights[i] {//出栈mono_stack = mono_stack[:len(mono_stack)-1]}if len(mono_stack) == 0 {right[i] = n} else {right[i] = mono_stack[len(mono_stack)-1]}mono_stack = append(mono_stack, i)}ans := 0for i := 0; i < n; i++ {ans = max(ans, (right[i] - left[i] - 1) * heights[i])}return ans
}func max(x, y int) int {if x > y {return x}return y
}

算法:柱状图中最大矩形相关推荐

  1. 算法学习之——矩形切割思想

    算法学习之--矩形切割思想                                                      MPS [定义 Define]   对于求解若干个矩形的面积的交集 ...

  2. 【数据结构与算法】之柱状图中最大矩形的求解思路和算法示例

    一.题目要求 给定 n 个非负整数,用来表示柱状图中各个柱子的高度,并且每个柱子彼此相邻,且宽度为 1 .求在该柱状图中,能够勾勒出来的矩形的最大面积. 以下是柱状图的示例,其中每个柱子的宽度为 1, ...

  3. 点在不规则图形内算法python_目标检测算法中规则矩形和不规则四边形IOU的Python实现...

    交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,我们在进行目标检测算法测试时,重要的指标,是产生的预测框(candidate bound)与标记框(grou ...

  4. 蓝桥杯练习算法题(矩形切割成正方形)

    书山有路勤为径,学海无涯苦作舟 点赞再看,养成习惯 目录 1.前言 2.题目 3.代码 3.前言: 最近在准备即将到来的蓝桥杯比赛,拼命刷题,锻炼解题的算法,俗话说熟能生巧,现在的是去做大量的题目,来 ...

  5. c语言将矩形分成多个小正方形,蓝桥杯练习算法题(矩形切割成正方形)

    书山有路勤为径,学海无涯苦作舟 点赞再看,养成习惯 目录 1.前言 2.题目 3.代码 3.前言: 最近在准备即将到来的蓝桥杯比赛,拼命刷题,锻炼解题的算法,俗话说熟能生巧,现在的是去做大量的题目,来 ...

  6. 练习:柱状图中最大矩形

    我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 柱状图中的最大矩形 题目 代码运行效果 完整代码 练习题目   此题类似我上一个练习"盛最多水的容器",可以说完 ...

  7. 伍六七带你学算法 入门篇-矩形重叠

    力扣解题-----每日一题-836 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形 ...

  8. 力扣算法之两矩形求和

    原题目 223. 矩形面积 给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积. 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay ...

  9. 在柱状图中找最大矩形——O(n)时间复杂度java实现

    在柱状图中找最大矩形--O(n)时间复杂度java实现 ZZ:http://blog.csdn.net/xybsos/article/details/8049048 具体题目如下:给一组非负的整数来表 ...

最新文章

  1. 物联网时代营销怎么做?
  2. 通过rsync+inotify实现数据的实时备份
  3. MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
  4. SQLALCHEMY_DATABASE_URI格式实例
  5. 无需Windbg | 使用VS 2019调试.NET程序的Crash异常
  6. [渝粤教育] 武汉理工大学 刑法 参考 资料
  7. html5测试题整理--针对标签的概念性
  8. 对if...else if...的理解
  9. 查看高通kernel用哪个dsti
  10. WebService究竟是什么?
  11. 【OpenGL】Shader实例分析(七)- 雪花飘落效果
  12. C#、ASP.NET 将PDF转换成Swf
  13. mysql 有没有minus_MySQL实现差集(Minus)和交集(Intersect)
  14. 23种设计模式及解释(中英文对照), 以及有实例源码参考
  15. win10 nginx部署前端项目(静态资源服务器和HTML)
  16. Log4j2配置之Appenders
  17. Windows系统中电脑无法进入睡眠状态的解决办法
  18. 针对Intel芯片mac、win平台对cpu功耗、频率、电源等信息检测
  19. 微信小程序 MinUI 组件库系列之 abnor 异常流组件 1
  20. javascript中 $和#符号的意思

热门文章

  1. 【Flutter】Flutter 拍照示例 ( Android 应用兼容 Android X | Gradle 版本号 | Gradle 插件版本号 | Android X 支持 | SDK 版本 )
  2. 【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )
  3. Android java 多线程(三)
  4. js中表单验证常用到的正则表达式
  5. 如何配置和部署安全的.NET三层应用
  6. LeetCode算法题14:递归和回溯2
  7. 插入排序之——直接插入排序(c/c++)
  8. 好嗨哟~谷歌量子神经网络新进展揭秘
  9. 学界 | 数据并行化对神经网络训练有何影响?谷歌大脑进行了实证研究
  10. css之object-fit