算法:柱状图中最大矩形
题目要求
给定 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
}
算法:柱状图中最大矩形相关推荐
- 算法学习之——矩形切割思想
算法学习之--矩形切割思想 MPS [定义 Define] 对于求解若干个矩形的面积的交集 ...
- 【数据结构与算法】之柱状图中最大矩形的求解思路和算法示例
一.题目要求 给定 n 个非负整数,用来表示柱状图中各个柱子的高度,并且每个柱子彼此相邻,且宽度为 1 .求在该柱状图中,能够勾勒出来的矩形的最大面积. 以下是柱状图的示例,其中每个柱子的宽度为 1, ...
- 点在不规则图形内算法python_目标检测算法中规则矩形和不规则四边形IOU的Python实现...
交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,我们在进行目标检测算法测试时,重要的指标,是产生的预测框(candidate bound)与标记框(grou ...
- 蓝桥杯练习算法题(矩形切割成正方形)
书山有路勤为径,学海无涯苦作舟 点赞再看,养成习惯 目录 1.前言 2.题目 3.代码 3.前言: 最近在准备即将到来的蓝桥杯比赛,拼命刷题,锻炼解题的算法,俗话说熟能生巧,现在的是去做大量的题目,来 ...
- c语言将矩形分成多个小正方形,蓝桥杯练习算法题(矩形切割成正方形)
书山有路勤为径,学海无涯苦作舟 点赞再看,养成习惯 目录 1.前言 2.题目 3.代码 3.前言: 最近在准备即将到来的蓝桥杯比赛,拼命刷题,锻炼解题的算法,俗话说熟能生巧,现在的是去做大量的题目,来 ...
- 练习:柱状图中最大矩形
我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 柱状图中的最大矩形 题目 代码运行效果 完整代码 练习题目 此题类似我上一个练习"盛最多水的容器",可以说完 ...
- 伍六七带你学算法 入门篇-矩形重叠
力扣解题-----每日一题-836 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形 ...
- 力扣算法之两矩形求和
原题目 223. 矩形面积 给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积. 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay ...
- 在柱状图中找最大矩形——O(n)时间复杂度java实现
在柱状图中找最大矩形--O(n)时间复杂度java实现 ZZ:http://blog.csdn.net/xybsos/article/details/8049048 具体题目如下:给一组非负的整数来表 ...
最新文章
- 物联网时代营销怎么做?
- 通过rsync+inotify实现数据的实时备份
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- SQLALCHEMY_DATABASE_URI格式实例
- 无需Windbg | 使用VS 2019调试.NET程序的Crash异常
- [渝粤教育] 武汉理工大学 刑法 参考 资料
- html5测试题整理--针对标签的概念性
- 对if...else if...的理解
- 查看高通kernel用哪个dsti
- WebService究竟是什么?
- 【OpenGL】Shader实例分析(七)- 雪花飘落效果
- C#、ASP.NET 将PDF转换成Swf
- mysql 有没有minus_MySQL实现差集(Minus)和交集(Intersect)
- 23种设计模式及解释(中英文对照), 以及有实例源码参考
- win10 nginx部署前端项目(静态资源服务器和HTML)
- Log4j2配置之Appenders
- Windows系统中电脑无法进入睡眠状态的解决办法
- 针对Intel芯片mac、win平台对cpu功耗、频率、电源等信息检测
- 微信小程序 MinUI 组件库系列之 abnor 异常流组件 1
- javascript中 $和#符号的意思
热门文章
- 【Flutter】Flutter 拍照示例 ( Android 应用兼容 Android X | Gradle 版本号 | Gradle 插件版本号 | Android X 支持 | SDK 版本 )
- 【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )
- Android java 多线程(三)
- js中表单验证常用到的正则表达式
- 如何配置和部署安全的.NET三层应用
- LeetCode算法题14:递归和回溯2
- 插入排序之——直接插入排序(c/c++)
- 好嗨哟~谷歌量子神经网络新进展揭秘
- 学界 | 数据并行化对神经网络训练有何影响?谷歌大脑进行了实证研究
- css之object-fit