LeetCode—221. 最大正方形
生活随笔
收集整理的這篇文章主要介紹了
LeetCode—221. 最大正方形
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
221. 最大正方形
題目描述:
在一個由 ‘0’ 和 ‘1’ 組成的二維矩陣內(nèi),找到只包含 ‘1’ 的最大正方形,并返回其面積。
考察重點:動態(tài)規(guī)劃
方法概括:二維矩陣中查詢最大矩形 dp[i][j] = Min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1 也可以使用暴力算法:向右下遍歷
func findMin(a, b, c int) int {temp := aif temp > b {temp = b}if temp > c {temp = c}return temp } func MaximalSquare(matrix [][]byte) int {var recmatrix [][]int //負責記錄每一個點可以達到的最大面積for i := 0; i < len(matrix); i++ {t := make([]int, len(matrix[0]))recmatrix = append(recmatrix, t)}var max int = 0for i := 0; i < len(matrix); i++ {for j := 0; j < len(matrix[0]); j++ { //遍歷所有節(jié)點 查找他左側,上側,左上側節(jié)點可以達到的最大面積進行比較if matrix[i][j] == '0' {continue}if i == 0 || j == 0 { //邊緣節(jié)點必定為1recmatrix[i][j] = 1if recmatrix[i][j] > max { //考慮 0 1 的情況max = recmatrix[i][j] // 1 0}continue}/**狀態(tài)轉移方程dp[i][j] = Min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1*/recmatrix[i][j] = findMin(recmatrix[i-1][j], recmatrix[i][j-1], recmatrix[i-1][j-1]) + 1if recmatrix[i][j] > max {max = recmatrix[i][j]}}}return max * max //返回面積 } ##################暴力解法###################### func decima(matrix [][]byte, i, j int) int {var k int/**從a開始 k為向外步數(shù),此處為1-3k=1遍歷b,k=2遍歷c,k=3遍歷d..........a b c d..b b c d..c c c d..d d d d..........*/for k = 1; k < len(matrix)-i && k < len(matrix[0])-j; k++ {for i1 := i; i1 <= i+k; i1++ { //列不動,遍歷行(縱向)if matrix[i1][j+k] == '0' {return k - 1 //如果有一個參數(shù)不為1,直接返回k-1(這一輪不符合要求,說明上一輪符合要求)}}for j1 := j; j1 <= j+k; j1++ { //行不動,遍歷列(橫向)if matrix[i+k][j1] == '0' {return k - 1}}}return k - 1 }func MaximalSquare(matrix [][]byte) int {var max int = 0for i := 0; i < len(matrix); i++ {for j := 0; j < len(matrix[0]); j++ { //遍歷所有節(jié)點if matrix[i][j] == '0' {continue}temp := decima(matrix, i, j) + 1 //若當前結點為1,則向他右下方遍歷。走k-1步為矩形,說明矩形大小為(k-1) + 1if temp > max {max = temp}}}return max * max //返回面積 }總結
以上是生活随笔為你收集整理的LeetCode—221. 最大正方形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux php 中文乱码解决
- 下一篇: HADOOP__PIG安装与配置