演算法學習之路 尋找最大正方形

2021-10-05 21:30:36 字數 1604 閱讀 6186

在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。

示例:輸入: 

1 0 1 0 0

1 0 1 1 1

1 1 1 1 1

1 0 0 1 0

輸出: 4

解題思路:

1.暴力破解法:

尋找每個值為1的點的座標,以該座標為左上點尋找盡可能大的正方形,計算其長度,返回長度的平方。

2.動態規劃:

每個dp(i,p)的座標表示以該座標為右下角的正方形的最長邊。

這題官方的解題方法預設每行陣列的列都是相等的,由於題目裡沒有明確指出,以下給出的解答同樣適用於陣列列數不相等的情況:

package com.ucarinc.wtf.demo;

/** * @projectname: shiro-demo

* @package: com.ucarinc.wtf.demo

* @classname: maximalsquare

* @author: [email protected]

* @description: 最大正方形

* @date: 2020/5/8 13:54

* @version: 1.0

*/public class maximalsquare else

}x = indexx;

y = indexy;}}

}return maxsize;

}/***

* @author [email protected]

* @description 判斷是否為正方形

* @date 2020/5/8 16:54

* @param matrix 二維陣列

* @param startx 左上角x座標

* @param starty 左上角y座標

* @param endx 右下角x座標

* @param endy 右下角y座標

* @return boolean

*/public static boolean issquare(char matrix, int startx, int starty, int endx, int endy)

for (int start = starty; start <= endy; start++)

if (matrix[startx][start] == '1')else }}

return true;

}/***

* @author [email protected]

* @description 動態規劃演算法

* @date 2020/5/8 16:56

* @param matrix

* @return int

*/public static int maximalsquarev2(char matrix)

else else }}

maxlength = math.max(matrix[x][y] - '0',maxlength);}}

return maxlength*maxlength;}}

最大正方形

題目鏈結 在乙個n m的只包含0和1的矩陣裡找出乙個不包含0的最大正方形,輸出邊長。輸入格式 輸入檔案第一行為兩個整數n,m 1 n,m 100 接下來n行,每行m個數字,用空格隔開,0或1.輸出格式 乙個整數,最大正方形的邊長 輸入樣例 1 複製 4 4 0 1 1 1 1 1 1 0 0 1 1...

最大正方形

題解 if a i j 1 f i j min min f i j 1 f i 1 j f i 1 j 1 1 f i j 表示以節點i,j為右下角,可構成的最大正方形的邊長。只有a i j 1時,節點i,j才能作為正方形的右下角 對於乙個已經確定的f i j x,它表明包括節點i,j在內向上x個節...

最大正方形

一.題目描述 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 二.思路 動態規劃 當前元素matrix i j 對應的最大正方形邊長跟matrix i 1 j m...