leetcode演算法題 最大正方形

2021-10-04 05:41:56 字數 989 閱讀 6291

動態規劃:

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 關於動態規劃的題,如果遇到二維陣列的題基本都可以優化為一維陣列,就像是傳給三...