博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maximal Rectangle
阅读量:7186 次
发布时间:2019-06-29

本文共 1633 字,大约阅读时间需要 5 分钟。

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.

 

题意:在一个只有0、1的矩阵中找到一个面积最大的矩形,它内部所有的元素都是1。

算法:一开始,理解错了题意,后来在网上看了一下,终于弄明白了,用到了动态规划的思想,首先遍历矩阵,用一个二维数组A[i][j]表示第i行,以第j个元素为结尾的连续1的个数,遍历一次矩阵就可以得到,然后计算一matrix[i][j]为右下角的全1矩阵的最大值,也是遍历,不过遍历的是A数组,找到以第i行第j列为右下角的最大全1矩阵的面积,只要i向上遍历就可以了,找最小宽,然后算面积,如果面积比当前保存的面积大,就更新面积。写得不太清楚,有点乱,不过理解了就简单了。代码如下:

1 class Solution { 2 public: 3     int maximalRectangle(vector
> &matrix) { 4 if(matrix.size()==0||matrix[0].size()==0) return 0; 5 int m[matrix.size()+1][matrix[0].size()+1]; 6 int len1=matrix.size(); 7 int len2=matrix[0].size(); 8 for(int i=0;i<=len1;i++) m[i][0]=0; 9 for(int i=1;i<=len1;i++)10 {11 for(int j=1;j<=len2;j++)12 {13 if(matrix[i-1][j-1]=='1')14 {15 m[i][j]=m[i][j-1]+1;16 }17 else m[i][j]=0;18 }19 }20 21 int ret=0;22 23 for(int i=1;i<=matrix.size();i++)24 {25 for(int j=1;j<=matrix[0].size();j++)26 {27 int width=m[i][j];28 int k=i;29 while(k>0)30 {31 if(m[k][j]==0) break;32 width=min(width,m[k][j]);33 ret=max(ret,width*(i-k+1));34 k--;35 }36 }37 }38 return ret;39 }40 };

 

转载于:https://www.cnblogs.com/sqxw/p/4039699.html

你可能感兴趣的文章
centos7搭建svn服务器
查看>>
正则表达式 零宽断言 负向零宽断言 平衡组/递归匹配
查看>>
里氏转换原则
查看>>
GDB 调试
查看>>
MTK平台,当修改一些代码时,使用什么编译命令可以最有效率
查看>>
新手入门Underscore.js 中文(template)
查看>>
Qt 添加更新库
查看>>
linux --监控系统性能 vmstat
查看>>
Java匹马行天下之JavaSE核心技术——工具类
查看>>
动态创建二维素组
查看>>
学习笔记:Pig基础
查看>>
JavaScript框架——jquery
查看>>
性能分析—查询运行慢的原因(SQLServer2008宝典)
查看>>
【.NET】Ninject使用
查看>>
项目(一)ftp搭建
查看>>
以太网端口技术
查看>>
如何区分不同用户——Cookie/Session机制详解
查看>>
高性能JavaScript 循环语句和流程控制
查看>>
laravel-admin配置安装完新手使用
查看>>
ajax
查看>>