leetCode最大正方形
阿新 • • 發佈:2018-12-17
在一個由 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
邊界:邊界為第一行,第一列
狀態轉移方程:temp陣列儲存這個點所組成最大正方形的邊長,temp[i][j]=min(temp[i-1][j], temp[i][j], temp[i-1][j-1])
public int maximalSquare(char[][] matrix) { int m = matrix.length; if(m == 0) return 0; int n = matrix[0].length; int max = 0; int[][] temp = new int[m][n]; //第一列 for(int i = 0; i < m; i++) { temp[i][0] = matrix[i][0] - '0'; max = Math.max(max, temp[i][0]); } //第一行 for(int i = 0; i < n; i++) { temp[0][i] = matrix[0][i] - '0'; max = Math.max(max, temp[0][i]); } //遍歷 for(int i = 1; i < m; i++) { for(int j = 1; j < n; j++) { temp[i][j] = matrix[i][j] == '1' ? Math.min(temp[i-1][j-1],Math.min(temp[i-1][j], temp[i][j-1])) + 1 : 0; max = Math.max(max, temp[i][j]); } } return max * max; }