当前位置: 代码迷 >> 综合 >> Leetcode(85)maximal-rectangle(最大矩形面积)
  详细解决方案

Leetcode(85)maximal-rectangle(最大矩形面积)

热度:83   发布时间:2023-09-19 08:21:48.0

题目描述:

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

Example:

Input:
[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]
]
Output: 6

解题思路:

1、动态规划:

 

class Solution {public int maximalRectangle(char[][] matrix) {if(matrix == null || matrix.length == 0)return 0;int rows = matrix.length;int cols = matrix[0].length;int[][] dp = new int[rows][cols];int area = 0;for(int i = 0; i < rows; i++) {for(int j = 0; j < cols; j++) {   if(i == 0) {dp[i][j] = matrix[i][j] == '1' ? 1 : 0;}else {dp[i][j] = matrix[i][j] == '1' ? (dp[i - 1][j] + 1) : 0;}int min = dp[i][j];for(int k = j; k >= 0; k--) {if(min == 0) break;if(dp[i][k] < min) min = dp[i][k];  area = Math.max(area, min * (j - k + 1));}}}return area;}}

2、遍历标记

class Solution {public int maximalRectangle(char[][] matrix) {if(matrix == null || matrix.length == 0)return 0;int rows = matrix.length;int cols = matrix[0].length;int area = 0;for(int i = 0; i < rows; i++) {for(int j = 0; j < cols; j++) {   int size = maxArea(matrix, i, j);area = Math.max(size, area);          }}return area;}public int maxArea(char[][] matrix, int m, int n) {int area = 0;int minSize = Integer.MAX_VALUE;for(int i = m; i < matrix.length && matrix[i][n] == '1'; i++) {int size = 0;for(int j = n; j < matrix[0].length && matrix[i][j] == '1'; j++) {size++;}minSize = Math.min(minSize, size);area = Math.max(area, minSize * (i - m + 1));}return area;   }
}