動態規劃:
dp[i]
[j]以(i,j)為右下角的正方形的邊長
狀態轉移:
dp[i]
[j]=
min(dp[i-1]
[j],dp[i]
[j-1
],dp[i-1]
[j-1])
+1;
**:
int
maximalsquare
(vectorchar
>>
& matrix)
for(
int j=
0;j)for
(int i=
1;i(dp[i-1]
[j-1
]&&dp[i-1]
[j]&&dp[i]
[j-1
]&&matrix[i]
[j]==
'1')
s=std::
max(s,matrix[i]
[j]-
'0')
; s=std::
max(s,dp[i]
[j]*dp[i]
[j]);}
}return s;
}
但是這個**還能再優化,比如dp陣列的初始化,這裡可以將陣列兩維都分別多設定一行,這樣可以省去初始化**了。並且我之前的**有點混亂,其實有了min這個約束,判斷條件只用判斷matrix[i][j]=='1'
即可,並且計算dp的**也可以簡化。
int
maximalsquare
(vectorchar
>>
& matrix)
s=max(s,dp[i]
[j]*dp[i]
[j]);}
}return s;
}
LeetCode 最大正方形
在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 思路分析 使用動態規劃。轉移方程為dp row col 1 min dp row 1 col 1 min dp r...
leetcode最大正方形
1.動態規劃 設矩陣的長寬為m,n,dp m 1 n 1 其中dp i j 表示以 i 1,j 1 為右下方元素的最大正方形的邊長,初始dp全為0 遍歷矩陣中每乙個元素,若matrix i,j 0,則跳過 若matrix i,j 不為0,則dp i j 的值由dp i 1 j 1 dp i 1 j ...
LeetCode刷題筆記 221 最大正方形
在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 sdc2的優化思路 i 應該換成 j 關於動態規劃的題,如果遇到二維陣列的題基本都可以優化為一維陣列,就像是傳給三...