`

最大正方形

阅读更多

在一个二维01矩阵中找到全为1的最大正方形

样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

返回 4

动态规划的办法,我们可以先求出正方形最大的边长,我们推导出的公式是,原来的数组是arr[][];
f[][]是存储结果的表,当最大正方形包括arr[i][j]的时候,f[i][j] = min(f[i-1][j-1],f[i][j-1],f[i-1][j])+1;当不包含f[i][j]的时候,f[i][j] =0;此时 最大的边长为num = max(f[i][j],num)
完整代码如下:
package lintcode;

import java.util.Scanner;

/**
 * Created by Taoyongpan on 2017/11/15.
 * 436,在一个二维01矩阵中找到全为1的最大正方形
 * 动态规划的思想
 * 求出正方形最长的边长
 */
public class MaxSquare {

    public static int SquareMax(int[][] arr){
        int n = arr.length;
        int m = arr[0].length;
        int num = 0;
        int[][] f = new int[n+1][m+1];
        if (n<=0||m<=0){
            return num*num;
        }
        //初始化f数组
        for (int i = 0;i<n;i++){
            f[i][0] = arr[i][0];
            num = Math.max(f[i][0],num);
        }
        for (int j = 0; j<m;j++){
            f[0][j] = arr[0][j];
            num = Math.max(f[0][j],num);
        }

        for (int i = 1;i<n;i++){
            for (int j = 1;j<m;j++){
                if (arr[i][j]==1)
                    f[i][j] = Math.min(Math.min(f[i-1][j-1],f[i][j-1]),f[i-1][j])+1;
                else
                    f[i][j] = 0;
                num = Math.max(f[i][j],num);
            }
        }
        return num*num;
    }
    //主函数
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[][] arr = new int[n+1][m+1];
            for (int i = 0 ;i<n;i++){
                for (int j = 0;j<m;j++){
                    arr[i][j] = sc.nextInt();
                }
            }
            System.out.println(SquareMax(arr));
        }
    }
}
 
分享到:
评论

相关推荐

    华为机考java代码:求含1的最大正方形动态规划 .txt

    华为机考编程题目当中一道经典的题目,矩阵由01组成,求包含1的最大正方形,这里用的是动态规划求解,思路有点抽象,代码很简单,编程语言java.

    php-leetcode题解之最大正方形.zip

    动态规划的关键在于,我们只需要知道当前位置的上、左、上左三个方向的最大正方形边长,就可以计算出当前位置的最大正方形边长。 以下是解决问题的主要步骤: 1. 初始化一个与输入矩阵大小相同的二维数组dp,所有值...

    python-leetcode面试题解之第221题最大正方形-题解.zip

    标题中的“python-leetcode面试题解之第221题最大正方形-题解.zip”表明这是一份关于Python编程语言解决LeetCode在线编程平台上的第221题——“最大正方形”的面试题解压缩包。LeetCode是一个非常受欢迎的网站,它...

    最大正方形(洛谷-P1387).rar

    【标题】:“最大正方形(洛谷-P1387)” 这个题目是来自编程竞赛平台洛谷的一道算法问题,编号为P1387。通常,这类问题旨在测试参赛者的逻辑思维、数据结构和算法应用能力。题目通常会给出一个二维矩阵,要求找出...

    实验2++最大正方形与约瑟夫问题1

    实验2的两个部分主要涉及了两个经典的问题,分别是“最大正方形问题”和“约瑟夫问题”,这两个问题都是在计算机科学和算法设计中常见的挑战。 一、最大正方形问题 这个问题是图像处理中的一个常见预处理步骤。...

    javascript-leetcode面试题解动态规划问题之第221题最大正方形-题解.zip

    本压缩包文件“javascript-leetcode面试题解动态规划问题之第221题最大正方形-题解.zip”显然包含了关于JavaScript解决LeetCode第221题的动态规划解决方案。 题目221是LeetCode中的一个经典问题,名为“最大正方形...

    最大正方形.md

    最大正方形.md

    Inscribed_Rectangle:计算机视觉功能可定位内接任意形状的最大正方形或矩形-matlab开发

    Inscribed_Rectangle 包提供 2 个低级计算机视觉/图像分析功能,能够定位内接在由二进制掩码(黑白图像)定义的任意形状内的最大正方形或矩形。 仅考虑具有垂直/水平边缘的矩形。 已证明的函数可用作解决更大图像...

    skypesky#leetcode-for-javascript#1725. 可以形成最大正方形的矩形数目1

    for (const [len, width] of rectangles) {for (const [len, width] of rectangles) {

    三年级数学上册长方形和正方形练习十九PPT教案.pptx

    6. **剪切正方形**:从长方形纸张中剪下最大正方形,正方形的边长等于原长方形的较短边。然后,计算剪掉正方形后剩余部分的周长,即 `(长 + 宽 - 边长) × 2`。 7. **长方形属性**:长方形的长是宽的3倍,那么长...

    长方形、正方形周长练习.docx

    13. 剪下的最大正方形边长是 6 厘米,周长是 \( 4 \times 6 = 24 \) 厘米。 14. 铁丝长等于正方形周长,所以是 \( 4 \times 16 = 64 \) 分米。 15. 36 厘米铁丝围成正方形,边长是 \( 36 / 4 = 9 \) 厘米。 16. 1 米...

    Scratch案例-画正方形

    在舞台正中央绘制一个边长为200的正方形,要求: 1、围绕舞台中心绘制正多边形,均匀分布在四个象限中 2、正方形边长为200个单位,线条粗细、颜色自定 3、利用画笔绘制正方形,不能有多余的线条

    《长方形、正方形面积的计算》.ppt

    在这个问题中,最大正方形的边长等于长方形的较短边,所以如果长方形的尺寸是30厘米 × 20厘米,那么剪下的最大正方形面积就是20厘米 × 20厘米 = 400平方厘米。 此外,课程还鼓励学生应用所学知识解决实际问题,如...

    部编版第7讲:长方形和正方形.docx

    5. 在长方形中剪出最大正方形的方法:以长方形的较短边为正方形的边长,可以剪出一个最大的正方形。例如,一个长8厘米,宽6厘米的长方形中,最大的正方形边长是6厘米,周长是24厘米。 6. 周长的概念:一个封闭图形...

    三年级上册长方形和正方形经典习题.doc

    - 剪去长方形中的最大正方形,剩余部分的周长会改变,每次剪去最大正方形,都会减少周长。 - 使用长方形周长公式,结合已知步数和花园面积,可求宽。 - 靠墙围鸡圈,要考虑只围三边的情况。 - 靠墙角围鸡圈,只...

    人版六年级上圆的面积与正方形的面积的关系.doc

    首先,我们来探讨圆中最大正方形与圆面积的关系。当我们在一个圆内画一个最大的正方形时,正方形的对角线将等于圆的直径。设圆的半径为R,那么正方形的面积可以通过两条对角线的长度计算,即2R乘以2R再除以2,得到2R...

    三年级数学上册7长方形和正方形爬坡题新人教版

    2. **最大正方形的折法**:在长方形中折出最大正方形,正方形的边长等于长方形的较短边。例如2中,折出的正方形边长为8厘米,周长是32厘米。 3. **不同拼接方式**:用小正方形拼成长方形,有多种可能的排列方式,如...

    三年级上册长方形和正方形单元复习PPT学习教案.pptx

    例如,如果长方形的长是15厘米,宽是10厘米,那么剪出的最大正方形的边长就是10厘米,其周长就是10厘米乘以4,即40厘米。 周长的比较也是学习的重点,比如判断不同形状或大小的图形周长的大小关系。在题目中,学生...

    《长方形和正方形的周长》.ppt

    若原长方形的长为8厘米,宽为6厘米,裁剪出的最大正方形边长将受限于原长方形的较短边,即为6厘米。因此,最大正方形的周长为6厘米×4=24厘米。类似地,将铁丝弯成正方形,其周长将等于原长方形的周长,例如10分米的...

Global site tag (gtag.js) - Google Analytics