Woodyiiiiiii / LeetCode

My private record of Leetcode solution

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Leetcode 1727. Largest Submatrix With Rearrangements

Woodyiiiiiii opened this issue · comments

这道题跟85. Maximal Rectangle有些类似。

根据题意,我们可以随意排序,组成我们想要的最大面积。所以,我们要根据贪心的**,尽可能地要把多的同在一行的1集中在一起,这就想到排序;接着,在循环中用累加计算当前列的最大高度,再进行贪心排序。

class Solution {
    public int largestSubmatrix(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        int ans = 0;
        for (int i = 0; i < m; ++i) {
            List<Integer> dp = new ArrayList<>();
            for (int j = 0; j < n; ++j) {
                if (matrix[i][j] == 1 && i > 0) {
                    matrix[i][j] += matrix[i - 1][j];
                }
                dp.add(matrix[i][j]);
            }
            dp.sort(Collections.reverseOrder());
            for (int j = 0; j < n; ++j) {
                ans = Math.max(ans, dp.get(j) * (j + 1));
            }
        }
        return ans;
    }
}