221.最大正方形
221.最大正方形
题解
题目:求数组中的最大正方形的面积
思路:动态规划
state: dp[i][j]:以i,j为右下角的正方形的最大边长 function: dp[i][j] = min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]) + 1 intialize: answer:
代码
func maximalSquare(matrix [][]byte) int { n, m := len(matrix), len(matrix[0]) dp := make([][]int, n+1) for i := range dp { dp[i] = make([]int, m+1) } ans := 0 for i := 1; i <= n; i++ { for j := 1; j <= m; j++ { cnt := matrix[i-1][j-1] if cnt == '1' { dp[i][j] = min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]) + 1 } else { dp[i][j] = 0 } ans = max(ans, dp[i][j]) } } return ans * ans } func max(i, j int) int { if i > j { return i } return j } func min(i, j, k int) int { return min1(min1(i, j), k) } func min1(i, j int) int { if i > j { return j } return i }