88最大正方形(221)
阿新 • • 發佈:2020-09-11
作者:
晚於: 2020-09-02 12:00:00後提交分數乘係數50%
截止日期: 2020-09-09 12:00:00
問題描述 :
在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。
示例:
輸入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
輸出: 4
輸入說明 :
首先輸入矩陣的行數m、列數n
然後輸入m行,每行n個字元0或1,中間無空格分隔。
輸出說明 :
輸出一個整數
輸入範例 :
輸出範例 :
#include <iostream> #include<vector> using namespace std; class Solution { public: int maximalSquare(vector<vector<int>>& matrix) { if(matrix.size()==0) return 0; int m=matrix.size(),n=matrix[0].size(); vector<vector<int>> dp(m,vector<int>(n));int len=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(matrix[i][j]==1) { if(i==0||j==0) dp[i][j]=1; else dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1; } len=max(len,dp[i][j]); } } return len*len; } }; int main() { int m, n; char data; vector<vector<int> > matrix; cin>>m>>n; for(int i=0; i<m; i++) { vector<int> row; for(int j=0; j<n; j++) { cin>>data; row.push_back(data-'0'); } matrix.push_back(row); } int res=Solution().maximalSquare(matrix); cout<<res<<endl; return 0; }