Leetcode--85. 最大矩形
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
输出:6
思路:动态规划
用dp二维数组保存每个位置以它结尾的,1的长度,例如dp[0][2]位置,1的长度为1,dp[2][4]位置,1的长度为5
知道各个位置以他结尾的1的长度之后,开始考虑矩形的宽度
以本题的结果为例,dp[2][4]长度为5,现在以他结尾的矩形面积max暂定为5,之后向上搜索,dp[1][4]长度为3,但是我们的高度增加了,所以现在面积是2*3=6,增大了,更新max为6即可。
提交的代码:
class Solution {
public int maximalRectangle(char[][] matrix) {
int n = matrix.length;
int m=0;
if(n>0) //题中有测试案例输入为空,因此直接写int m = matrix[0].length;会报错
{
m = matrix[0].length;
}
if(m==0&&n==0)
{
return 0;
}
int i,j,max=-1,t=0,k;
int[][] dp1 = new int[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(matrix[0][0]=='1')
{
dp1[0][0]=1;
}
else if(matrix[0][0]=='0')
{
dp1[0][0]=0;
}
if(i==0&&j>0)
{
if(matrix[i][j]=='1')
{
dp1[i][j] = dp1[i][j-1]+1;
}
else
{
dp1[i][j] = 0;
}
}
else if(j==0&&i>0)
{
if(matrix[i][j]=='1')
{
dp1[i][j]=1;
}
}
else if(i>0&&j>0)
{
if(matrix[i][j]=='1')
{
dp1[i][j] = dp1[i][j-1]+1;
}
else
{
dp1[i][j] = 0;
}
}
t = dp1[i][j];
for(k=i;k>=0;k--)
{
t = java.lang.Math.min(dp1[k][j], t); //比较目前j列已经遍历过的行中,找到最小长度进行计算
if(t*(i-k+1)>max)
{
max = t*(i-k+1);
}
}
}
}
return max;
}
}
完整代码:
public class Solution85 {
public static int maximalRectangle(char[][] matrix) {
int n = matrix.length;
int m=0;
if(n>0)
{
m = matrix[0].length;
}
if(m==0&&n==0)
{
return 0;
}
int i,j,max=-1,t=0,k;
int[][] dp1 = new int[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(matrix[0][0]=='1')
{
dp1[0][0]=1;
}
else if(matrix[0][0]=='0')
{
dp1[0][0]=0;
}
if(i==0&&j>0)
{
if(matrix[i][j]=='1')
{
dp1[i][j] = dp1[i][j-1]+1;
}
else
{
dp1[i][j] = 0;
}
}
else if(j==0&&i>0)
{
if(matrix[i][j]=='1')
{
dp1[i][j]=1;
}
}
else if(i>0&&j>0)
{
if(matrix[i][j]=='1')
{
dp1[i][j] = dp1[i][j-1]+1;
}
else
{
dp1[i][j] = 0;
}
}
t = dp1[i][j];
for(k=i;k>=0;k--)
{
t = java.lang.Math.min(dp1[k][j], t);
if(t*(i-k+1)>max)
{
max = t*(i-k+1);
}
}
}
}
return max;
}
public static void main(String[] args)
{
char[][] a = {{'1','0','1','0','0'},{'1','0','1','1','1'},{'1','1','1','1','1'},{'1','0','0','1','0'}};
System.out.println(maximalRectangle(a));
}
}
Leetcode--85. 最大矩形相关推荐
- java 最大矩形_Java实现 LeetCode 85 最大矩形
85. 最大矩形 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [ ["1","0","1 ...
- LeetCode 85. 最大矩形(DP/单调递增栈,难)
文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...
- 2021-06-17Leetcode84.柱状图中最大的矩形 Leetcode.85最大矩形
以任意一个矩形为高,只要找出最大的宽即可,这个宽是由其两侧第一个比它小的数字组成 1.1我的解法--暴力解法 以每个矩形为中心向两边扩散,分别在两边找到比它小的第一个数字,分别求出这两块 面积,然后加 ...
- leetcode 85. 最大矩形(dp)
给定一个仅包含 0 和 1 .大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例 1: 输入:matrix = [["1",&quo ...
- LeetCode 85.最大矩形
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [ ["1","0","1", ...
- 单调栈:leetcode 84. 柱状图中最大的矩形/85最大矩形
84. 柱状图中最大的矩形 遍历数组,以每一个元素作为高,向左右两边拓展,遇到第一个比该元素小的位置停下 图片源自leetcode力扣 一.暴力解法(超时) 遍历数组,以每一个元素作为高,向左右两边拓 ...
- LeetCode:85. 最大矩形
题目链接 85. 最大矩形 题目描述 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [["1","0" ...
- 【DP】LeetCode 85. Maximal Rectangle
LeetCode 85. Maximal Rectangle Solution1: 一语惊醒梦中人啊,参考链接:https://www.youtube.com/watch?v=2Yk3Avrzauk ...
- leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)
题目 https://leetcode.com/problems/maximal-rectangle/ 题解 本题与 leetcode 84. Largest Rectangle in Histogr ...
- 【LeetCode笔记】85. 最大矩形(Java、单调栈)
文章目录 题目描述 思路 && 代码 二刷 题目描述 其实是84. 柱状图中最大的矩形的兄弟题目,理解成多个84题,对结果取max即可. 思路 && 代码 一行抽象出一 ...
最新文章
- 用Unity的视频广告创建2D动作游戏 Create Action 2D Game With Video Ads In Unity
- 阿里程序员连续两次绩效3.25!大老板威胁要开除他!还不给赔偿金!问大家该如何维权?...
- Forrtl: severe(157): Program Exception - access violation
- 深入理解Spring系列之三:BeanFactory解析
- 第五章 MongoDb索引优化 5.4
- 微信自动回复和自动抢红包实现原理(二):自动回复
- 开发 Sublime Text 3 插件简易教程
- 带权的活动选择_操作系统 复习要点+习题-2016
- SpringBoot整合themeleaf+bootstrap (五)
- VC 项目支撑文件解释
- 解决办法一:GetProcAddress函数返回值总为NULL
- android模拟器定位失败,Android-无法在模拟器上获取GPS位置
- python爬虫毕业论文大纲参考模板_毕业论文提纲参考模板
- 微信开通检测工具使用小诀窍
- c语言运算符表 壁纸,Fences 3.0.5 桌面图标管理工具正式版
- 关于瑞星杀毒软件无法完全卸载、自动重装的无奈,与相应的解决办法
- thinkphp5.1生成错误日志文件以及Evn的使用
- 完美解决idea Maven Cannot reconnect
- 软件架构设计---软件架构风格
- 使用Retrofit的过程中遇到 type xxx.xxx.xxxdoes not have type parameters
热门文章
- 剑指Offer - 面试题3. 数组中重复的数字(哈希)
- cms安装教程Linux,DoraCMS安装教程(linux)
- python rsa 公钥解密_python使用rsa库做公钥解密(网上别处找不到)
- hive 创建表_2min快速了解,Hive内部表和外部表
- java分治法求数列的最大子段和_Java十大经典排序算法动画解析和 代码实现
- python3.7.1使用_在不影响使用python3.7.1的功能的情况下,是否可以从python代码中删除所有的ufuture_uu语句?...
- 微信小程序在当前页面设置其他页面的数据
- python的序列类型及其特点_Fluent Python 笔记——序列类型及其丰富的操作
- 美团NLP中心算法实习生内推啦!
- 开源开放 | 中文相对复杂词汇识别数据集RCWI-Dataset(CCKS2021)