Leetcode 84.85.控制变量法+DP

Leetcode 84.柱状图中最大的矩形 阅读详情

在这里插入图片描述
在这里插入图片描述

题目如图,这一类型的题目很容易让人联想到线段树,虽然我了解一点,然而还并不会…于是without any tools,我开始从零摸索这个题目。矩形的目标很容易让我们从边界的角度思考问题,我们会试图找到这个最大面积矩形的两端,然而这样的话问题变的困难,因为你要同时考虑距离和高度两个因素。

于是发现了问题的所在,我们就解决这一问题。如果我们固定高度呢?问题一下子就明晰了。于是,我以每个bar的高度做高,再来找最大面积的矩形,便只要找到它两边分别距它最远且比它高的bar即可。

剩下的问题变成如何找到每个bar两边距它最远且比它高的bar。我们用两个数组left[i],right[i]来记录这两个值。具体实现我们看代码。

int max(int a,int b){
    return a>b?a:b;
} //求解最大值。

if(heightsSize == 0) return 0; //如果为空,则返回0.
  
    int* leftMax = (int*)malloc(sizeof(int)*heightsSize);
    int* rightMax = (int*)malloc(sizeof(int)*heightsSize);
    leftMax[0] = -1;
    rightMax[heightsSize-1] = heightsSize;
    int i, p;   //创建过程。
    
    for(i = 1;i < heightsSize;i++){
        p = i - 1;
        while(p >= 0 && heights[p] >= heights[i]) p = leftMax[p];
        // 我们要找到的是连续的一段都比heights[i]要高的,否则画不出一个矩形。
        leftMax[i] = p;
    }
    
    for(i = heightsSize -2;i >= 0;i--){
        p = i + 1;
        while(p < heightsSize && heights[p] >= heights[i]) p = rightMax[p];
        //与上同理。
        rightMax[i] = p;
    }
    
    int maxArea = 0;
    for(i = 0;i < heightsSize;i++) maxArea = max(maxArea,heights[i]*(rightMax[i]- leftMax[i] - 1)); //以每个bar的高度为高,求出最大矩形面积,再求出其中最大值。
    return maxArea;

在这里插入图片描述
在这之后,我又碰到了刚刚那个题的加强版,从一维升级成了二维。那么我们一样的思想,控制一维,变成一维问题思考,再把一维中的矩形中最大矩形的面积返回即可。具体的,我们可以分别以每一行为x轴,将问题转化为上面的问题,即如果某行中某点为0,我们就让它的高度为0,如果为1,我们计算他上方连续的1的个数便是他的高度,利用上一个题,便可以求出以这一行作为x轴,在其上方所能获得的最大矩形了。

    if(matrixRowSize == 0) return 0;  
    int row = matrixRowSize, col =matrixColSizes;
    int heights[row][col];
    int i, j; //创建
    
    for(i = 0; i < col;i++){
        heights[0][i] = matrix[0][i] == '0'?0:1;
    } 
    
    for(i = 1; i <row;i++){
        for(j = 0; j < col;j++){
            heights[i][j] = matrix[i][j] == '0'?0:heights[i-1][j]+1;
        }
    }计算每一个点作为x轴上点时,它所代表的高度。
    
    int maxRectangle = 0;
    for(i = 0; i < row;i++) maxRectangle = max(maxRectangle,largestRectangleArea(heights[i], col));
    return maxRectangle;

类似问题:Trapping Rain Water。
还有我个人很喜欢的一道dp题:Target Sum.

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

相关推荐

Leetcode 84:柱状图中最大的矩形(超详细的解法!!!)

求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 解题思路 这个问题非常有意思。我们首先可以想到的是暴力破解,我们通过i不断遍历heights,然后在遍历的过...

coordinate的博客 1万+

leetcode84- 柱状图中最大的矩形(三种思路:暴力,单调栈+哨兵(详解),分治)

leetcode84- 柱状图中最大的矩形(三种思路:暴力,单调栈+哨兵(详解),分治)介绍题目解题思路解法一:暴力向两边搜索解法二:单调栈画图演示宽度计算:解法三:单调栈+哨兵解法四:分治,这是最快的方法代码解法一:暴力解法二:单调栈解法三:单调栈+哨兵解法四:动态规划 介绍 我的LeetCode主页,一题一题解 标签:贪心 84. 柱状图中最大的矩形 难度 困难 84. 柱状图中最大的矩形 https://leetcode-cn.com/problems/largest-rectangle-in-hi

Alivorth的博客 1070

VMware VSAN 高级参数介绍(测试用)

VSAN 的策略驱动让我们看到了VSAN无穷的潜力,其设计思路相当新颖,在一个基础资源池上使用策略就能实现不同对象的区分服务,而目前没有其他厂家能到VMware这样的高度。 VSAN 呈现给用户配置很简单,但实际上设计及后台比较复杂。笔者无意间发现了VSAN的隐藏高级参数设置,有很多好玩的选项想分享出来。这些参数全部是针对每主机进行设置的。VSAN 中有很多默认设置,这些设置应该都是研发人员多次测试得出的最优值,修改可能导致环境异常,并不建议修改! 目录 参数1:全闪配置下 SSD 写缓存最大.

山水牧羊 2030

leetcode题解:第84题Largest Rectangle in Histogram

题目 Largest Rectangle in Histogram Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. Above i...

chenf1999的博客 695

第二章 零差云控关节模组内部构造

对零差云控的eRob70I进行了拆解

SFY__优快云的博客 5964

一、5.8GHz射频接收机链路仿真

5.8GHz射频接收机链路仿真 一、5.8GHz射频接收机链路仿真 文章目录5.8GHz射频接收机链路仿真目的一、原理1、仿真工具2、二次下变频超外超接收机二、要求三、内容总结 目的   1、熟悉射频接收机整体结构。   2、学习使用MATLAB工具进行行为级仿真。   3、进行简单的通信链路预算。   4、直观感受接收机各个模块对整体性能的影响。   5、分析增益、线性度、噪声系数等参数。 一、原理 1、仿真工具   MATLAB是一款功能强大的数学软件,针对不同领域提供各种工具箱,帮助设计者快

平乾的博客 6760

leetcode84. 柱状图中最大的矩形(单调栈-java)

这样以来,我们得到它们左侧的柱子编号分别为[−1,0,−1,−1,3,4,5,3]。用相同的方法,我们从右向左进行遍历,也可以得到它们右侧的柱子编号分别为 [2,2,3,8,7,7,7,8],这里我们将位置 8 看作「哨兵」。去遍历这个数组,每到一个数字时,我们就找出能以当前数字为最小值的子数组的范围,知道范围后,我们就可以求出其最大矩形的大小.遍历所有位置后,就可以得出最大值了.我们用一个具体的例子 [6,7,5,2,4,5,9,3]来理解单调栈。输入:heights = [2,1,5,6,2,3]

SP_1024的博客 730

从零到一:RK3588平台上的星闪模块驱动移植全解析

本文详细解析了在RK3588平台上移植UB37星闪模块驱动的完整流程,涵盖内核配置、设备树适配、驱动编译、功能测试等关键步骤。通过实践指导,帮助开发者掌握星闪技术在嵌入式系统中的集成与应用,提升无线通信模块的开发效率。

qsc90123456的博客 337

LeetCode-84

看了官方的视频后,才得知该题是一道很经典的题目了。官方推荐首先采用暴力解法,然后再优化为单调栈。 暴力解法 要求矩形的面积,首先要知道长和宽(这道题由于是在直方图中,所以下面称为宽和高),所以有两种办法,第一种是固定宽,然后找高;第二种是固定高,然后找宽。如果采用固定宽,那么会导致O(n3n^3n3)的复杂度。如果采用固定高,会有O(n2n^2n2)的复杂度。官方说通过Java提交暴力解法也可以通过测试,而且暴力解法有助于了解一些细节。 具体思路就是,遍历每一个元素,当前元素为高,然后依次往两边遍历,直到两

LZCDTU的博客 497

蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现

通常情况下,较优的解对应的路径上的信息素会被加强,而较差解对应的信息素则会减少或蒸发。的化学物质,这种物质会在蚂蚁走过的路径上留下痕迹,后续的蚂蚁会根据这些信息素的浓度来选择路径,从而形成一条从蚁巢到食物源的。在求解TSP蚁群算法中,每只蚂蚁相互独立,用于构造不同的路线,蚂蚁之间通过信息素进行交流,合作求解。的过程,该路段经过的蚂蚁越多,信息素留下的就越多,浓度越高,更多的蚂蚁都会选择这个路段。需要注意的是,蚁群算法是一种。(6)计算每只蚂蚁的总距离:遍历每只蚂蚁的路线,累加经过的城市之间的距离。

m0_73804764的博客 1万+

OpenClaw 开机自启配置:Windows/macOS/Linux 全平台技术指南

OpenClaw 开机自启全平台配置指南 本文提供了在Windows、macOS和Linux系统上配置OpenClaw开机自启的完整技术方案。主要内容包括: Windows配置:提供三种方法(Windows服务、任务计划程序、启动文件夹),详细说明服务脚本创建、服务注册和测试流程 macOS配置:使用LaunchAgent实现开机自启,包含配置文件创建和加载方法 Linux配置:通过systemd服务实现,包括服务单元文件创建和启用步骤 系统要求:明确硬件(64位CPU/4GB内存)和软件(各平台操作系统版

一键难忘的博客 2993

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

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

weixin_48323589的博客 522

uniapp - 实现手机端H5网页直播功能效果,拿到后端推流地址或播放资源后进行前端的流畅播放和画面展示功能,uniapp实时推流/拉流直播系统详细教程(提供完整示例代码,一键复制开箱即用!)

uniapp,h5网页,手机端H5网页,uniapp h5直播功能页面,uniapp直播实时推送显示,uniapp h5直播怎么做,怎么使用uniapp去实现移动端手机H5直播,h5 vue+uniapp怎么做直播,uniapp中使用videojs构建H5直播播放器,uniappH5端怎么实现直播推流,uniapp如何实现直播,直播聊天功能,h5平台端直播用什么插件,uniapp手机网页直播用什么组件插件播放器,uniapp手机H5直播播放器详细教程,直播项目,怎么使用vue+uniapp怎么做H5实时直播

✅ 精选推荐文章 8792

Heckman 两阶段法及与工具变量法的区别

一、适用范围 Heckman两阶段模型适用于解决由样本选择偏差(sample selection bias)造成的内生性问题。 在经济学领域,样本选择偏差的典型例子是研究女性的受教育情况对女性工资的影响。按照这个思路,一般会去问卷收集或在哪个网站下载部分女性的受教育情况,工资,及其他特征数据,例如年龄,毕业院校等级等个人特征,然后做回归。不过这样做有一个问题,就是登记的女性,都是在工作的,但是许多受教育程度较高的女性不工作,选择做家庭主妇,这部分样本就没有算在内,样本失去随机性。这就导致模型只是用到了在

celine0227的博客 2万+

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3034

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【刷题1】LeetCode 84. 柱状图中最大的矩形 java题解

题目 https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ 方法一:单调栈

乾坤未定,你我皆是黑马 502

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[LeetCode]84. 柱状图中最大的矩形(java实现)单调栈

[LeetCode]84. 柱状图中最大的矩形(java实现)单调栈1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路(单调栈): 单调栈能解决的问题: 找这个序列中每个数左边(或右边)离他最近的比他小的数下标是多少 本题的本质是找每一个数左边第一个比它小的数left[i]和右边第一个比他小的数right[i],(right[i] - left[i] - 1) * heights

cloud的博客 619

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leetcode 84 柱状图中最大的矩形

leetcode84 柱状图中最大的矩形 题目描述 暴力法 依次遍历所有可能的矩阵情况,选出最小面积的矩阵 分治法 首先选出最小元素,乘以数组长度得到面积area; 最小元素左侧最小面积area_left; 最小元素右侧最小面积area_right; 最小面积 = Math.max(area, area_left, area_right); public class Solution { ...

suyongcai1234的博客 410

leetcode84. 柱状图中最大的矩形(dp)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 dp不是最优解,stack是最优解 class ...

rudychan的博客 639

【LeetCode】84. 柱状图中最大的矩形(单调栈)

1. 题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 ...

weixin_41888257的博客 972

【Leetcode刷题篇】leetcode84 柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 解题思路: 具体来说就是:依次遍历柱形的高度,对于每一个高度分别向两边扩散,求出以当前高度为矩形的最大宽度多少。 package com.lc.

Mind_programmonkey的博客 636

动态规划TLE之后转向单调栈的解题路径——LeetCode 84 柱状图中的最大矩形(困难)

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

weixin_51529433的博客 346

代码随想录算法训练营第60天 | (考试周)动态规划 LeetCode84.柱状图中最大的矩形

代码随想录算法训练营第60天 | (考试周)动态规划 LeetCode84.柱状图中最大的矩形。

weixin_46724054的博客 180

控制变量指标和常用分组整理(2000-2022)

est1 构建固定资产、无形资产和其他长期资产支付的现金 / 期初。形资产和其他长期资产支付的现金 + 取得子公司及其他营业单位支付的现金净额) /产、无形资产和其他长期资产支付的现金-处置固定资产、无形资产和其他长期资产收回的。(构建固定资产、无形资产和其他长期资产支付的现金 + 取得子公司及其他营业单位。支付的现金净额 - 处置固定资产、无形资产和其他长期资产收回的现金净额 - 处置。当年是否ST或PT 当年ST或PT为1,否则为0。

zxwk01的博客 2543

LeetCode84(柱状图中最大的矩形)理解单调栈

我们需要找到左边第一个比他小的柱子高度与右边比他小的第一个柱子的高度.我们会发现数组本身就是单调的,这样按照我们之前的思路,会导致全部存入栈中,而没有产生计算.那我们如何去触发计算呢?对于每一个柱形,我们得先选取一个基准.什么叫基准呢,就是以这个柱子的高度,去找寻能够凑成与这个柱子构成的矩形.所以我们的栈里面是单调递减的.这样我们再来解释一下,如何从这样一个单调栈中找到第一个比此时柱子高度小的值.这样一看,对于此时基准6而言,左右都不能扩展,此时算出的矩形面积应该就是他自己本身构成的矩形。

m0_65013257的博客 1087

力扣84-柱状图中最大的矩形(最容易看懂的栈图解 Java版题解)

力扣84-柱状图中最大的矩形 一、原题题目 1.1 题目   给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。   以上左图是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。右图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 1.2 示例 示例: 输入: [2,1,5,6,2,3]输出: 10 来源:力扣(LeetCode)链接:https://leetcod

ItDaChuang的博客 628
上一篇: 基本计算器的初步实现——将表达式转换成逆波兰表达式并计算结果
下一篇: 简单数学(一)Greedy——调整+排序+高精
EndlessDating
博客等级 码龄8年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值