【leetcode】85. 最大矩形
毫无头绪。。
看了答案才会做。原来就是单调栈的变种
创建一个新的矩形,里面的数字代表左边连续1的数量
那么,对于
[["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]]
这个矩阵,可以化为
1 0 1 0 0
1 0 1 2 3
1 2 3 4 5
1 0 0 1 0
这样只需对每一列运用84题中的方法即可求出答案
''' 1 0 1 0 0 1 0 1 2 3 1 2 3 4 5 1 0 0 1 0 [0,0],[2,2] [0,0],[2,4] [0,4] [0,0],[3,3] ''' class Solution: def maximalRectangle(self, matrix: List[List[str]]) -> int: ret = 0 m = len(matrix) n = len(matrix[0]) newMatrix = [[0] * n for _ in range(m)] for i in range(m): add = 0 for j in range(n): if matrix[i][j] == '0': add = 0 else: add = add + 1 newMatrix[i][j] = add newMatrix.append([0] * n) for i in range(n): s = [-1] for j in range(m + 1): cur = newMatrix[j][i] while len(s) != 0 and newMatrix[s[-1]][i] > cur: height = newMatrix[s[-1]][i] s.pop() left = s[-1] if len(s) != 0 else 0 right = j ret = max(ret, height * (right - left - 1)) s.append(j) return ret

浙公网安备 33010602011771号