leetcode 85. 最大矩形(dp)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 85. 最大矩形(dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個僅包含 0 和 1 、大小為 rows x cols 的二維二進制矩陣,找出只包含 1 的最大矩形,并返回其面積。
示例 1:
輸入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
輸出:6
代碼
class Solution {public int maximalRectangle(char[][] matrix) {if(matrix.length==0) return 0;int n=matrix.length,m=matrix[0].length;int[][][] dp=new int[n][m][2];//dp[i][j][0]表示matrix[i][j]左邊有多少個1,dp[i][j][1]表示matrix[i][j]上邊有多少個1dp[0][0][0]=matrix[0][0]=='1'?1:0;dp[0][0][1]=matrix[0][0]=='1'?1:0;int res=matrix[0][0]=='1'?1:0;for(int i=1;i<m;i++)//初始化最上面的一行{if(matrix[0][i]=='1'){dp[0][i][0]=dp[0][i-1][0]+1;dp[0][i][1]=1;res= Math.max(res,dp[0][i][0]*dp[0][i][1]);}}for(int i=1;i<n;i++)//初始化最左邊的一列{if(matrix[i][0]=='1'){dp[i][0][1]=dp[i-1][0][1]+1;dp[i][0][0]=1;res= Math.max(res, dp[i][0][1]*dp[i][0][0]);}}for(int i=1;i<n;i++)for(int j=1;j<m;j++){if(matrix[i][j]=='1'){dp[i][j][0]=dp[i][j-1][0]+1;dp[i][j][1]=dp[i-1][j][1]+1;//刷新當前位置的dp值int len=dp[i][j][0],le=1;res= Math.max(res, le*len);le++;for(int k=1;k<dp[i][j][1];k++,le++)//從當前行開始向上遍歷以當前位置為右下角的所有可能組成的矩陣,計算面積{len=Math.min(len,dp[i-k][j][0]);res= Math.max(res, le*len);}}}return res;} }總結
以上是生活随笔為你收集整理的leetcode 85. 最大矩形(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 455. 分发饼干(贪
- 下一篇: leetcode 205. 同构字符串(