Largest Submatrix With Rearrangements
MediumArrayGreedySortingMatrix
Solution
import { range } from '@algorithm/lib';
export function largestSubmatrix(matrix: number[][]): number {
const [m, n] = [matrix.length, matrix[0].length];
let answer = 0;
let prevHeights: [number, number][] = [];
for (const row of range(m)) {
const cols = new Set<number>();
const heights: [number, number][] = [];
prevHeights.forEach(([height, col]) => {
if (matrix[row][col] === 1) {
heights.push([height + 1, col]);
cols.add(col);
}
});
for (const col of range(n)) {
if (!cols.has(col) && matrix[row][col] === 1) {
heights.push([1, col]);
}
}
heights.forEach(([height], i) => {
answer = Math.max(answer, height * (i + 1));
});
prevHeights = heights;
}
return answer;
}