[LeetCode]题解(python):085-Maximal Rectangle
题目来源:
https://leetcode.com/problems/maximal-rectangle/
题意分析:
给定一个二维的二进制矩阵,也就是只包括0 和 1的,找出只包括1的最大的矩阵的面积。
题目思路:
这道题目可以用84题的解决方法去解决。如果选定了一行为起点,这一行向上或者向下从这行开始连续1的个数是bar的高度,那么就可以求出以这一行起得到的最大的矩阵面积。遍历所有的行,得到最大的结果为这题的最后结果。
代码(python):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Solution(object): def maximalRectangle(self, matrix): """ :type matrix: List[List[str]] :rtype: int """ m = len(matrix) if m == 0: return 0 n = len(matrix[0]) def solve(s): mans = 0 ans,ansindex,i = [],[],0 while i < len(s): if len(ans) == 0 or s[i] >ans[-1]: ans.append(s[i]);ansindex.append(i) elif s[i] < ans[-1]: lastindex = 0 while len(ans) > 0 and ans[-1] > s[i]: lastindex = ansindex.pop() mans = max(mans,ans.pop() * (i - lastindex)) ans.append(s[i]);ansindex.append(lastindex) i += 1 while len(ans) != 0: mans = max(mans,ans.pop() * (len(s) - ansindex.pop())) return mans s = [0 for i in range(n)] ans = 0 for i in range(m): for j in range(n): if matrix[i][j] == '1': s[j] += 1 else: s[j] = 0 ans = max(ans,solve(s)) return ans