221. Maximal Square解題報告

Description:

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

Example:

For example, given the following matrix:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

Return 4.

Link:

https://leetcode.com/problems/maximal-square/description/

解題方法:

DP:
假設dp[i][j]是以點[i][j]為右下角的正方形可以有的最大的邊長。
那么dp[i][j] = min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1]))。
解釋:
當matrix[i][j] = 1時候,說明這個點可以從它左上,上,左三個方向來進一步擴大這三個方向的正方形,其擴大的值 = 這三個方向能形成正方形的邊的最小值。

Tips:

Time Complexity:

O(mn)時間
O(mn)空間

完整代碼:

int maximalSquare(vector<vector<char>>& matrix) {
    int row = matrix.size();
    if(!row)
        return 0;
    int col = matrix[0].size();
    if(!col)
        return 0;
    int result = 0;
    vector<vector<int>> dp(row, vector<int>(col, 0));
    for(int i = 0; i < row; i++) {
        for(int j = 0; j < col; j++) {
            if(i != 0 && j != 0)
                dp[i][j] += min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1]));
            if(matrix[i][j] == '1')
                dp[i][j]++;
            else
                dp[i][j] = 0;
            result = max(result, dp[i][j]);
        }
    }
    return result * result;
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,771評論 0 33
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,327評論 0 18
  • papi醬(姜逸磊),集美貌與才華于一身的女子,從2013年起就在天涯嘗試發(fā)布內(nèi)容,2015年8月突然成名并迅速成...
    Sting閱讀 5,635評論 1 14
  • 昨晚看劇到凌晨---legal high---很嗨就收不住了 就因為看到別人引用了劇情截圖,手賤就帶進去了 因為一...
    helen1990_閱讀 237評論 0 0
  • 感賞兒子 今天早上依然能夠按時起床,克服寒冷,克服困倦,克服對上學不好的觀感。大冬天孩子堅持早起太不容易了! 感賞...
    鄒凌_中閱讀 163評論 0 5