Leetcode典型題解答和分析、歸納和彙總——T221(最大正方形)

問題描述:

在一個由0和1組成的二維矩陣中,找到只包含1的最大正方形,並返回其面積。

問題分析:

這是一道典型的數學類的題目。需要明確一點是考察動態規劃方面的知識。

【1】我們用o來初始化另一個矩陣dp,而且維數和原數組相同;

【2】dp數組中的每個元素表示由1組成的最大正方形的邊長,如dp[i][j] = 2,表示到(i,j)這個位置,可以組成最長正方形的邊爲2;

【3】從初始位置開始,遍歷原始矩陣,當遇到0,則dp[i][j] = 0, 如果遇到1,則用下面動態方程來進行值更新:

                                         dp[i][j] = min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1]) +1

【4】我們最後用一個變量來記錄這個dp矩陣中最大的元素(邊長),然後進行平方,即爲該正方形的面積。

class Solution{
  public:
  int maximalSquare(vector<vector<char>> &matrix){
    int m = matrix.size();
     if(m==0)  return 0;
    int n = matrix[0].size();
    if(n==0) return 0;

    vector<vector<int>> dp(m,vector<int>(n,0));
    int max_num = 0;

    for(int i=0;i<m;i++)
    {
      for(int j=0;j<n;j++)
      {
        if(i==0||j==0)  dp[i][j]=matrix[i][j]-'0';
        else 
        {
          if(matrix[i][j]=='1')
          {
            dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;
          }
          else dp[i][j]=0;
        }
              max_num=max(max_num,dp[i][j]);
      }
    }
    return max_num*max_num;
  }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章