85. Maximal Rectangle

用dp计算矩形面积

文章目录

  • 1题目理解
  • 2分析
  • 2.1 暴力搜索
  • 2.2 动态规划
  • 3 相关题目

1题目理解

输入:char[][] matrix 是一个二维数组,值由0和1组成。
输出:一个矩形的面积,这个矩形只包含1。
例子:
Input:
[
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
]
Output: 6

2分析

最开始没理解,直接想之前做过,从一个点向4个方向延伸,找最大值。写完,发现图形不是矩形。
开始思考,因为是矩形该怎么做。思路参考力扣。

2.1 暴力搜索

枚举左上角(x1,y1)坐标和右下角(x2,y2)左边,计算面积。时间复杂度O(m3n3)O(m^3n^3)O(m3n3)

2.2 动态规划

dp[i][j] = 在第i行,以j结尾的最长的包含1的子数组的长度。
dp[i][j]=0,matrix[i][j]=′0′dp[i][j] = 0,matrix[i][j]='0'dp[i][j]=0,matrix[i][j]=0
dp[i][j]=dp[i][j−1]+1,matrix[i][j]=′1′dp[i][j] = dp[i][j-1]+1,matrix[i][j]='1'dp[i][j]=dp[i][j1]+1,matrix[i][j]=1

例如上面的例子 dp[1] = {1,0,1,2,3}
知道了每一行的宽度,从第i行开始,向上计算,找到最小的宽度,乘以高,就是矩形的面积。
这是一个动态规划dp的值只是返回值一部分的例子。

class Solution {private int maxSum;public int maximalRectangle(char[][] matrix) {if(matrix==null || matrix.length==0) return 0;int m = matrix.length;int n = matrix[0].length;int maxArea = 0;int[][]  dp = new int[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]=='1'){dp[i][j] = (j==0?1:dp[i][j-1]+1);int minWidth = dp[i][j];for(int upRow = i;upRow>=0;upRow--){int height = i-upRow+1;minWidth = Math.min(minWidth,dp[upRow][j]);maxArea = Math.max(maxArea,minWidth*height);}}}}return maxArea;}}

3 相关题目

304 Range Sum Query 2D – Immutable 计算一个矩阵范围内的数字和

class NumMatrix {int[][] dp;public NumMatrix(int[][] matrix) {if(matrix == null || matrix.length == 0) return;int m  = matrix.length;int n = matrix[0].length;dp = new int[m][n];for(int i=0;i<m;i++){for(int j = 0;j < n;j++){dp[i][j] = (i>0?dp[i-1][j]:0) + (j>0?dp[i][j-1]:0) - (i>0 && j>0? dp[i-1][j-1]:0) + matrix[i][j];}}}public int sumRegion(int row1, int col1, int row2, int col2) {if(dp == null) return 0;return  dp[row2][col2] - (row1>0?dp[row1-1][col2]:0) - (col1 >0 ?dp[row2][col1-1]:0) + (row1>0 && col1>0 ?dp[row1-1][col1-1]:0);}
}

221 Maximal Square 计算正方形的最大面积

class Solution {public int maximalSquare(char[][] matrix) {if(matrix==null || matrix.length==0) return 0;int m = matrix.length;int n = matrix[0].length;int maxSide = 0;int[][]  dp = new int[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]=='1'){if(i==0 || j==0){dp[i][j] = 1;}else{dp[i][j] = Math.min(dp[i-1][j],Math.min(dp[i-1][j-1],dp[i][j-1]))+1;}maxSide =  Math.max(maxSide,dp[i][j]);}}}return maxSide * maxSide;}
}

1277 Count Square Submatrices with All Ones 数一数正方形的个数

class Solution {public int countSquares(int[][] matrix) {int count = 0;int m = matrix.length;int n = matrix[0].length;int[][] dp = new int[m][n];for(int i = 0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j] == 1){if(i==0 || j==0){dp[i][j] =1;}else{dp[i][j] = Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;}count += dp[i][j];}}}return count;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面搞定jive3.1.1

全面搞定jive3.1.1yippit 原创 (参与分&#xff1a;351&#xff0c;专家分&#xff1a;1740) 发表&#xff1a;2003-9-13 下午8:33 版本&#xff1a;1.0 阅读&#xff1a;8316次 近日坛子里面很多人问起这个问题&#xff0c;要么中文显示乱码出错&#xff0c;要么不能数…

spring mvc学习(6):springMVC的常见注解

1RequestMapping的位置可以在类名或者方法名之前 或者同时加在两个位置 最终的路径是两个位置路径的组合 value是默认的名称&#xff0c;可以省略&#xff0c;如果有其他参数&#xff0c;就不能省略 如下配置的访问路径&#xff1a;协议://主机&#xff1a;//端口/虚拟路径…

powershell some check

// TODO 待处理 1 # powershell 编写的某些校验2 3 function listChecks() {4 write-host 可用的校验;5 write-host CRC - 循环冗余校验;6 return -- done;7 }8 9 # 字节数组 CRC, 不知道是不是符合CRC定义 10 function crcCheck($byteArray) { 11 if ($byteAr…

801. Minimum Swaps To Make Sequences Increasing

文章目录1题目理解2 暴力搜索3 动态规划3.1第一种情况3.2第二种情况1题目理解 输入&#xff1a;两个int数组A和B&#xff0c;长度都不为0&#xff0c;并且长度相同。 输出&#xff1a;最小交换次数。 规则&#xff1a;最终想要得到两个严格递增的数组。如果原始数组不符合要求…

用属性还是字段?

用属性还是字段&#xff1f; 我觉得对于实体类(没有方法的类)&#xff0c;只要用字段就好了&#xff0c;没必弄得像下面这个样子&#xff1a; private AttributeConfig m_ColumnMap;public AttributeConfig ColumnMap{get{return m_ColumnMap;}set{m_ColumnMapvalue;}}posted …

spring mvc学习(7):springmvc学习笔记(常用注解)

1. Controller Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用Controller注解定义的控制器有如下特点: 不需要继承任何类, 也不需要实现任何接口可以处理多个请求可以使用Servlet的相关特性 spring自动扫描所有基于注解的类, 并将其注册为spring…

模板——树状数组求逆序对

题目链接&#xff1a;https://www.luogu.org/problemnew/show/P1908 1 #include <map>2 #include <set>3 #include <cmath>4 #include <queue>5 #include <string>6 #include <cstdio>7 #include <cstring>8 #include <iostream&…

818. Race Car

文章目录1 题目理解2 BFS3 dp3.1 基本情况3.2 递归方程分析3.2.1 先超过target再调头3.2.2 不超过target4 说明1 题目理解 先讲规则。一辆小汽车停在位置0&#xff0c;并且方向朝向右侧&#xff0c;并且速度为1。小汽车每次可以选择加速A&#xff0c;那加速一次&#xff0c;新…

spring mvc学习(8):springmvc常用注解代码

目录结构 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation"http://java.sun.com/xml…

找了好久的BUG

找了好久的BUG <rsp:WEBPAGE id"PageContainer" TabSectionID"*****" runat"server"></rsp:WEBPAGE> <rsp:PLACEHOLDER id"AdminPage_Title" runat"server">公文流转流程工作点定义</rsp:PLACEHOLDER&…

python-if条件判断与while/for循环

条件判断if 让计算机像人一样&#xff0c;能判断是非对错&#xff0c;根据条件做一些事情。 if ------ if代码结构&#xff1a;------- if 条件:代码体tips&#xff1a;同一缩进范围内的代码被视作同一代码体,python官方推荐python缩进一次为4个空格is_happy True if is_happ…

第八十二期:掌握这些监控报警优化技巧,百万年薪不在话下!

运维工程师面试者第一个问题是&#xff1a;需要值班吗?笔者自己也曾经历过月入十万的时期&#xff0c;在那个时候&#xff0c;数个系统同时发布下一代版本&#xff0c;而老系统还需要过渡很长时间&#xff0c;工作量直接翻倍。 作者&#xff1a;焦振清 运维工程师面试者第一…

dp按照规模分类总结

本文章的内容来源于花花酱dp2。 做多了dp的题目之后总觉得有什么规律&#xff0c;但是自己没总结出来。花花酱按照输入规模、子问题个数、在解决一个问题的时候需要依赖的子问题个数为特征对题目做了分类。 其中绿色是比较简单的 &#xff0c;黄色是中等的&#xff0c;粉色是…

看了交大自产的电影《我的太阳》

呵呵&#xff0c;现在大学生自导自拍自演的电影越来越多了&#xff0c;不知道算是中国第几代导演&#xff1a;&#xff09; 我看电影一般比较关注情节&#xff0c;演技暂且不提。因为是校园电影&#xff0c;本片自然比较接近大学生生活&#xff0c;总体情节比较浪漫曲折(虽然部…

【BZOJ4559】【JLOI2016】—成绩比较(拉格朗日插值+dp)

传送门 dpdpdpf[i][j]f[i][j]f[i][j]表示前iii门课&#xff0c;有jjj个人没有被碾压的方案数 考虑f[i−1][j]f[i-1][j]f[i−1][j]转移到f[i][w](j≤w)f[i][w](j\le w)f[i][w](j≤w) 首先要选出w−jw-jw−j个新的没被他碾压的人 由于之前已经有一些没被碾压的人,所以方案数为(n−…

中兴通讯 基于定位的技术和市场分析

中兴通讯 基于定位的技术和市场分析 (2004-08-10 09:04:27) 8月5日&#xff0c;由中国联通和中兴通讯联合举办的“中国联通位置业务研讨会”在海口举行。中国联通总部及多个省的分公司领导&#xff0c;应用中兴通讯PN4747定位系统开展定位业务的多家集团客户代表以及华好…

第八十三期:这些高性能负载均衡架构知识点,90%的人分不清!

单服务器无论如何优化&#xff0c;无论采用多好的硬件&#xff0c;总会有一个性能天花板&#xff0c;当单服务器的性能无法满足业务需求时&#xff0c;就需要设计高性能集群来提升系统整体的处理性能。 作者&#xff1a;马天池 单服务器无论如何优化&#xff0c;无论采用多好…

15. 3Sum-数组

文章目录1题目理解2 排序双指针1题目理解 输入&#xff1a;int数组nums 规则&#xff1a;查找数组中任意三个数的和等于0 输出&#xff1a;符合条件的解&#xff0c;不包含重复的解 例子&#xff1a; nums [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1…

第八十四期: Java、Web 和移动程序员学习的 12 个框架

今天的文章中&#xff0c;我将分享一些你可以学习的框架&#xff0c;以提升你在移动和Web开发以及大数据技术方面的知识。 作者&#xff1a;芒果教你学编程 在今天的文章中&#xff0c;我将分享一些你可以学习的框架&#xff0c;以提升你在移动和Web开发以及大数据技术方面的…

关于mysql无法添加中文数据的问题以及解决方案

所有能设置的地方我都设置了&#xff0c;都设置的是ut8。然后&#xff0c;我执行了一下insert语句&#xff0c;报错了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 这个错误纠结了一天&#xff0c;最后&#xff0c;看到…