美文网首页
1139. 最大的以 1 为边界的正方形

1139. 最大的以 1 为边界的正方形

作者: 最困惑的时候就是能成长的时候 | 来源:发表于2019-08-12 16:46 被阅读0次

1139. 最大的以 1 为边界的正方形

1.想法:

1.循环暴力

image.png

循环遍历每个节点的值,当当前值为1的时候向左右扩散能找到的最大的边长

我们存在两个问题
1.怎么确定最大边长
2.怎么确定这个最大边长所构成的正方形是合法的
对于第一个问题:我们可以从改点到行边界和竖边界找到最大的边长,如果不合法依次减一直到为0
对于第二个问题:我们可以以改点为左上顶点依次检测每个边是否合法

例如:对于点(1,0) image.png
向右扩散到最右,向下边找到最大边长的上界.可以找到最大边长为min(向右,向下)
然后再去判断每条边是否合法
image.png

2.动态规划

//TODO

2.代码

class Solution {
   public int largest1BorderedSquare(int[][] grid) {
        int row = grid.length,col = grid[0].length,endX=0,endY=0,maxSide=0;
         for(int i=0;i<row;i++){
             for(int j=0;j<col;j++){
                 if(grid[i][j] == 1){
                     int disX = row-i;
                     int disY = col-j;
                     int side = disX>disY?disY:disX;
                     while(side>maxSide){
                         endX = i+side-1;
                         endY = j+side-1;
                         if(checkroute(grid,i,j,endX,endY)){
                             maxSide = side;
                             break;
                         }else{
                             side--;
                         }
                     }

                 }
             }
         }
         return maxSide*maxSide;
    }

    private boolean checkroute(int[][] grid, int startX, int startY, int endX, int endY) {
        //检测上左
        int left = startX;
        while(left<=endX){
            if(grid[left++][startY]!=1)return false;
        }
        //检测左下
        int leftDown = startY;
        while(leftDown<=endY){
            if(grid[startX][leftDown++]!=1)return false;
        }
        //检测右下
        int rightDown = startY;
        while(rightDown<=endY){
            if(grid[endX][rightDown++]!=1)return false;
        }
        //检测下左
        int downLeft = startX;
        while(downLeft<=endX){
            if(grid[downLeft++][endY]!=1)return false;
        }
        return true;
    }
}

相关文章

  • 1139. 最大的以 1 为边界的正方形

    1139. 最大的以 1 为边界的正方形 1.想法: 1.循环暴力 循环遍历每个节点的值,当当前值为1的时候向左右...

  • LeetCode #1139 Largest 1-Bordere

    1139 Largest 1-Bordered Square 最大的以 1 为边界的正方形 Description...

  • leetcode第221题:最大正方形 [中等]

    题目描述 考点 动态规划 解题思路 状态定义dp[i][j]: 表示以(i,j)为右下角全由1构成的最大正方形边长...

  • 面积最大的全1子矩阵

    题目见这里。 这个题目就是枚举搜索,找最大值。以行为例,在每一行中找到每一个左边界,然后枚举以该左边界为边界的线段...

  • margin相关

    1.两个或多个垂直元素,相邻边界会重合 1)边界都为(正或负)值,取绝对值最大的边界。 2)一个为负,一个为...

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

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

  • [Leetcode] 221. 最大正方形

    221. 最大正方形 来源: 221. 最大正方形 1. 题目描述 在一个由 0 和 1 组成的二维矩阵内,找到...

  • Day1: 心形图标的绘制

    1. 建立500*500的画板; 2. 建立一个正方形shift +R; 3. 以正方形的一边为直径画圆; 4. ...

  • 每天一道算法题6

    【预处理数组-最大正方形的边长】给定一个NN的矩阵matrix,只有0和1两种值,返回边框全是1的最大正方形的边长...

  • OpenGL案例:正方形键位控制

    绘制正方形 以正方形中心为原点定义顶点D到Y轴的距离为blockSize,即顶点D的二维坐标为(-blockSiz...

网友评论

      本文标题:1139. 最大的以 1 为边界的正方形

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