美文网首页工作生活
LeetCode.221 最大正方形

LeetCode.221 最大正方形

作者: 风卷晨沙 | 来源:发表于2019-07-03 10:42 被阅读0次

1、题目

最大正方形 - 力扣(LeetCode) https://leetcode-cn.com/problems/maximal-square/

2、题解

这道题目可以使用动态规划的思想,也就是将原问题拆解成子问题,再分治的想法。
在此题中,其实就是把计算在整个数组中最大的正方形的这个问题,拆解成两个小的问题,一是储存以该点为右下角的正方形的边长大小,二是比较这个数组中储存的值的大小。这样就可以得到最终的结果。
解释一下,为什么是以该点为右下角的正方形的边长大小

当我们判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上方三个点也一定是某个正方形的右下角,否则该点为右下角的正方形最大就是它自己了。那具体的最大正方形边长呢?我们知道,该点为右下角的正方形的最大边长,最多比它的上方,左方和左上方为右下角的正方形的边长多1,此时有两种情况,一是它的上方,左方和左上方为右下角的正方形的大小都一样的,这样加上该点(即上三点某一个正方形的边长加1)就可以构成一个更大的正方形。二它的上方,左方和左上方为右下角的正方形的大小不一样,合起来就会缺了某个角落,这时候只能取那三个正方形中最小的正方形的边长加1了。


最后,分享一下了解动态规划的文章?

动态规划算法入门,这就够了 https://baijiahao.baidu.com/s?id=1631319141857419948&wfr=spider&for=pc

3、代码

     //1、动态规划
    class Solution {
        public int maximalSquare(char[][] matrix) {
            //排除异常情况
            if(matrix.length==0||matrix[0].length==0){
                return 0;
            }
            int result=0;
            int rows = matrix.length;
            int columns = matrix[0].length;
            int[][] dp = new int[rows][columns];//用dp来保存结果
            for (int i = 0; i < rows; i++) {
                if(matrix[i][0]=='1'){
                    dp[i][0]=1;
                    result=1;
                }
            }
            for (int j = 0; j < columns; j++) {
                if (matrix[0][j]=='1'){
                    dp[0][j]=1;
                    result=1;
                }
            }
            for (int i = 1; i < rows; i++) {
                for (int j = 1; j < columns; j++) {
                    if(matrix[i][j]=='1'){
                        dp[i][j] = getMin(dp[i][j - 1], dp[i - 1][j - 1], dp[i - 1][j])+1;
                        result=getMax(result,dp[i][j]);
                    }

                }
            }
            return result*result;
        }
        //得到最小整数值
        private int getMin(int... values){
            int minValue = Integer.MAX_VALUE;
            for (int value:values){
                if(value<minValue){
                    minValue=value;
                }
            }
            return minValue;
        };
        //得到最大整数值
        private int getMax(int... values){
            int maxValue = Integer.MIN_VALUE;
            for (int value:values){
                if(value>maxValue){
                    maxValue=value;
                }
            }
            return maxValue;
        }


    }

4、执行结果

image.png

相关文章

  • LeetCode.221 最大正方形

    1、题目 最大正方形 - 力扣(LeetCode) https://leetcode-cn.com/problem...

  • 最大正方形

    在一个二维01矩阵中找到全为1的最大正方形您在真实的面试中是否遇到过这个题?Yes样例1 0 1 0 01 0 1...

  • 最大正方形

    题目描述 https://leetcode-cn.com/problems/maximal-square/ 解 思...

  • 最大正方形

    标签:动态规划 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 输入...

  • 最大正方形

    题目: 题目的理解: 找到1,则进行判断正方形的一圈是否都是1. 然后记录面积。 python实现 想看最优解法移...

  • 最大正方形

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 最大正方形

    简书来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maxi...

  • 最大正方形

    题目描述:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例:输入:1 0...

  • 最大正方形

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例:输入:1 0 1...

  • 圆形与正方面积比值相关比值相关规律

    1、在正方形内画最大圆,正方形的面积与圆的面积比值是1:0.785。 因为正方形面积=边长X边长,,圆面积=πr²...

网友评论

    本文标题:LeetCode.221 最大正方形

    本文链接:https://www.haomeiwen.com/subject/ldegcctx.html