在乙個由 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...