最大正方形

最大正方形

http://www.nowcoder.com/questionTerminal/0058c4092cec44c2975e38223f10470e

解题思路:根据提示,采用动态规划的方法求解。观察规律,除了单个元素的正方形,其余常规的正方形判断如下,
1 1
1 1
这是一个正方形,是因为arr[i-1][j-1],arr[i-1][j],arr[i][j-1],arr[i][j]的元素相同
增加问题规模,继续观察,
1 1 1
1 1 1
1 1 1
这是一个边长为3的正方形,同时包含四个边长为2的正方形
因此考虑当arr[i-1][j-1],arr[i-1][j],arr[i][j-1],arr[i][j]的元素相同时,将最右下角的元素表示为正方形的最大边长,即
1 1 1
1 2 2
1 2 3
最后输出边长最大的正方形面积

import java.util.*;


public class Solution {
    /**
     * 最大正方形
     * @param matrix char字符型二维数组 
     * @return int整型
     */
    public int solve (char[][] matrix) {
        // write code here
        int m=matrix.length;
        int n=matrix[0].length;
        int[][] dp=new int[m][n];
        int max=0;
        for(int i=0;i<m;i++){
            dp[i][0]=matrix[i][0]-'0';
        }
        for(int i=0;i<n;i++){
            dp[0][i]=matrix[0][i]-'0';
        }
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[i][j]=='1'){
                    dp[i][j]=Math.min(dp[i-1][j-1],dp[i-1][j]);
                    dp[i][j]=Math.min(dp[i][j],dp[i][j-1])+1;
                    max=Math.max(max,dp[i][j]);
                }
            }
        }
        return max*max;
    }
}
全部评论

相关推荐

想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务