您的位置:首页 > 其它

题目:Maximal Square

2015-08-21 00:03 302 查看
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.

您在真实的面试中是否遇到过这个题?

Yes

哪家公司问你的这个题?
Airbnb
Alibaba
Amazon Apple
Baidu Bloomberg
Cisco Dropbox
Ebay Facebook
Google Hulu
Intel Linkedin
Microsoft NetEase
Nvidia Oracle
Pinterest Snapchat
Tencent Twitter
Uber Xiaomi
Yahoo Yelp
Zenefits
感谢您的反馈

样例

For example, given the following matrix:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

Return
4
.

标签 Expand

动态规划

根据题意可用动态规划去求解,先求解出最大的正方形边长
若a[m,n] = 1
a[m,n] = min(a[m-1,n-1],min(a[m-1,n],a[m,n-1]))+1;
比如
10100
10111
11111
10010
求解后
10100
10111
11122
10010
求出最大的边长,面积=边长*边长
public class Solution {
/**
* @param matrix: a matrix of 0 and 1
* @return: an integer
*/
public int maxSquare(int[][] matrix) {
// write your code here
if(null==matrix||0==matrix.length) return 0;
int m = matrix.length;
int n = matrix[0].length;
int squareArr[][] = new int[m]
;
int res = 0;
for(int i=0;i<m;i++){
if(matrix[i][0]==1){
squareArr[i][0] = 1;
res = 1;
}
}
for(int j=0;j<n;j++){
if(matrix[0][j]==1){
squareArr[0][j]=1;
res = 1;
}
}

for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i][j]==1){
squareArr[i][j] = min(squareArr[i-1][j-1], min(squareArr[i][j-1],squareArr[i-1][j]))+1;
res = max(res, squareArr[i][j]*squareArr[i][j]);
}
}
}
return res;
}
public int min(int a,int b){
return a>b?b:a;
}
public int max(int a, int b){
return a>b?a:b;
}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: