博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】221. Maximal Square
阅读量:6573 次
发布时间:2019-06-24

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

Maximal Square

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

For example, given the following matrix:

1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0

Return 4.

 

Credits:

Special thanks to  for adding this problem and creating all test cases.

 

这题的DP思想部分借鉴了。

思路如下:构建二维数组len,len[i][j]表示以(i,j)为右下角的最大方块的边长。

递推关系为 len[i][j] = min(min(len[i-1][j], len[i][j-1]), len[i-1][j-1]) + 1;

如下图示意:

以(i,j)为右下角的最大方块边长,取决于周围三个位置(i-1,j),(i,j-1),(i-1,j-1),恰好为三者最小边长扩展1位。

若三者最小边长为0,那么(i,j)自成边长为1的方块。

class Solution {public:    int maximalSquare(vector
>& matrix) { if(matrix.empty() || matrix[0].empty()) return 0; int m = matrix.size(); int n = matrix[0].size(); int maxLen = 0; vector
> len(m, vector
(n, 0)); // first row for(int i = 0; i < n; i ++) { len[0][i] = (int)(matrix[0][i]-'0'); if(len[0][i] == 1) maxLen = 1; } // first col for(int i = 0; i < m; i ++) { len[i][0] = (int)(matrix[i][0]-'0'); if(len[i][0] == 1) maxLen = 1; } for(int i = 1; i < m; i ++) { for(int j = 1; j < n; j ++) { if(matrix[i][j] == '0') len[i][j] = 0; else { len[i][j] = min(min(len[i-1][j], len[i][j-1]), len[i-1][j-1]) + 1; maxLen = max(len[i][j], maxLen); } } } return maxLen * maxLen; }};

转载地址:http://nzljo.baihongyu.com/

你可能感兴趣的文章
Orchard: module开发基础技术知识
查看>>
什么是UPS电源系统
查看>>
产品管理:产品的三种驱动类型-技术、销售和市场驱动
查看>>
抓取html 写正则
查看>>
Android 中的 Service 全面总结
查看>>
学习sql
查看>>
WCF(四) 绑定
查看>>
发布一个MsBuild任务组件-可用于同时发布多个网站
查看>>
OpenRowSet导入Excel大批量数据
查看>>
myeclipse汉化及其相关配置设置(转)
查看>>
ORACLE常用监控语句(未完待续)
查看>>
高并发软件设计的几种方式
查看>>
poj1061
查看>>
(顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
查看>>
从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...
查看>>
上传图片并显示缩略图的最简单方法(c#)
查看>>
我所期待的vs2007
查看>>
关于ORM的一些外文资料
查看>>
maven2完全使用手册
查看>>
如何成为“10倍效率”开发者
查看>>