LC 1727. 重新排列后的最大子矩阵

https://leetcode-cn.com/problems/largest-submatrix-with-rearrangements/

这么简单的题目愣没有想出来,看了提示1 ”For each column, find the number of consecutive ones ending at each position.” 才有点思路。

这题正确的想法是,假设矩阵的ending row在i上的话,那么每个列的最大高度是多少,然后计算出所有可能矩阵的最大面积。

class Solution:
    def largestSubmatrix(self, matrix: List[List[int]]) -> int:
        n, m = len(matrix), len(matrix[0])
        hs = [0] * m
        ans = 0
        for i in range(n):
            for j in range(m):
                if matrix[i][j] == 1:
                    hs[j] += 1
                else:
                    hs[j] = 0

            tmp = hs.copy()
            tmp.sort(reverse=True)
            for j in range(m):
                area = (j + 1) * tmp[j]
                ans = max(ans, area)

        return ans