日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【动态规划】leetcode - Maximal Square

發布時間:2025/4/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【动态规划】leetcode - Maximal Square 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

稱號:

Maximal Square

?

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

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.


分析:

利用動態規劃求解。建立一個類node。node中成員變量left記錄每個點的左邊有幾個1(包含該點本身)、up記錄上邊有幾個1(包含該點本身)、maxsize記錄該點相應的最大正方形的邊長(該點在正方形右下角)。若一個點是‘0’,則其相應的node是(0,0,0).

1、用變量res記錄最大正方形的邊長。

2、先依次處理輸入矩陣matrix左上角那個點、第一行和第一列,求出這些位置的node值。

3、再依次遍歷matrix剩下的點,對每個點求出node值。并更新res。

4、返回res*res.


class node {public:int left,up,maxsize;node():left(0),up(0),maxsize(0){}node(int a,int b,int c):left(a),up(b),maxsize(c){} };class Solution { public:int maximalSquare(vector<vector<char>>& matrix) {if(matrix.empty() || matrix[0].empty())return 0;int rows=matrix.size(),cols=matrix[0].size();int res=0;vector<vector<node>> dp(rows,vector<node>(cols));if(matrix[0][0]=='1'){res=1;dp[0][0]=node(1,1,1);}for(int j=1;j<cols;++j){if(matrix[0][j]=='1'){res=1;dp[0][j]=node(dp[0][j-1].left+1,1,1);}}for(int i=1;i<rows;++i){if(matrix[i][0]=='1'){res=1;dp[i][0]=node(1,dp[i-1][0].up+1,1);}}for(int i=1;i<rows;++i){for(int j=1;j<cols;++j){if(matrix[i][j]=='1'){dp[i][j].left=dp[i][j-1].left+1;dp[i][j].up=dp[i-1][j].up+1;if(matrix[i-1][j-1]!='1')dp[i][j].maxsize=1;else{int tmp=min(dp[i-1][j-1].maxsize+1,dp[i][j].left);tmp=min(tmp,dp[i][j].up);dp[i][j].maxsize=tmp;}res=max(res,dp[i][j].maxsize);}}}return res*res;} };


版權聲明:本文博主原創文章,博客,未經同意不得轉載。

總結

以上是生活随笔為你收集整理的【动态规划】leetcode - Maximal Square的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。