问题描述
给定一个由 '0' 和 '1' 组成的二维矩阵,找出只包含 '1' 的最大矩形的面积。
解法一
解题思路:
我们可以使用单调栈的方法来解决这个问题。首先,我们将二维矩阵转换为一维数组,然后使用单调栈来找到每个位置的左右边界,最后计算面积。
/*
* @lc app=leetcode.cn id=85 lang=javascript
*
* [85] Maximal Rectangle
*/
// @lc code=start
function maximalRectangle(matrix) {
if (matrix.length === 0 || matrix[0].length === 0) return 0;
let m = matrix.length, n = matrix[0].length;
let heights = new Array(n).fill(0);
let ans = 0;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
heights[j] = matrix[i][j] === '0' ? 0 : heights[j] + 1;
}
let stack = [-1];
for (let k = 0; k < n + 1; k++) {
while (heights[k] < heights[stack[stack.length - 1]]) {
let h = heights[stack.pop()];
let w = k - 1 - stack[stack.length - 1];
ans = Math.max(ans, h * w);
}
stack.push(k);
}
}
return ans;
}
// @lc code=end