Skip to content

85-maximal-rectangle

DevGod
DevGod
Elf Vtuber
/**
* @param {character[][]} matrix
* @return {number}
*/
var largestRectangleArea = function(heights) {
heights.push(0);
let stack = [-1];
let ans = 0;
for(let I = 0; I<heights.length; I++){
while(stack.length && heights[I] < heights[stack.at(-1)]){
let H = heights[stack.pop()];
let W = I - stack.at(-1) - 1;
ans = Math.max(ans, H*W);
}
stack.push(I);
}
return ans;
};
var maximalRectangle = function(matrix) {
let DP = Array.from(
{length:matrix.length},
()=> new Array(matrix[0].length).fill(0)
);
DP[0][0] = Number(matrix[0][0]);
for(let row = 0; row<matrix.length; row++){
for(let col = 0; col<matrix[0].length; col++){
if(matrix[row][col] == "1"){
DP[row][col] = (DP[row-1]?.[col]??0) + 1;
}else{
DP[row][col] = 0;
}
}
}
let max = 0;
for(let row of DP){
max = Math.max(max, largestRectangleArea(row) );
}
return max;
};