最大矩形: (85号)

var maximalRectangle = function (matrix) {
  let max = 0
  if (matrix.length === 0) {
    return 0
  }
  let heights = new Array(matrix[0].length)
  for (let r = 0; r < matrix.length; r++) {
    let row = matrix[r]
    for (let c = 0; c < row.length; c++) {
      let item = row[c]
      if (item === '1') {
        if (heights[c]) {
          heights[c]++
        } else {
          heights[c] = 1
        }
      } else {
        heights[c] = 0
      }
    }
    max = Math.max(largestRectangleArea(heights), max)
  }
  return max
};

var largestRectangleArea = function (heights) {
  const stack = []
  let max = 0
  let i = 0
  while (i < heights.length) {
    if (stack.length === 0) {
      stack.push(i)
      i++
    } else {
      let topIndex = stack[stack.length - 1]
      let cur = heights[i]
      // 如果当前元素高 大于等于 栈顶元素的高; 直接入栈, 否则需要计算面积
      if (cur >= heights[topIndex]) {
        stack.push(i)
        i++
      } else {
        // 拿到栈顶元素, 同时将栈顶的元素 pop 出栈
        let topH = heights[stack.pop()]
        // 查看新栈顶下标的
        let newTop = stack.length === 0 ? -1 : stack[stack.length - 1]
        // 当前的 下标 i
        let area = (i - newTop - 1) * topH
        max = Math.max(max, area)
      }
    }
  }
  while (stack.length !== 0) {
    let topH = heights[stack.pop()]
    let newTop = stack.length === 0 ? -1 : stack[stack.length - 1]
    let w = heights.length
    let area = (w - (newTop + 1)) * topH
    max = Math.max(max, area)
  }
  return max
};

const r = maximalRectangle([
  ["1", "0", "1", "0", "0"],
  ["1", "0", "1", "1", "1"],
  ["1", "1", "1", "1", "1"],
  ["1", "0", "0", "1", "0"]
])

console.log(r)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目链接 tag: Hard; question:  Given a 2D binary matrix fille...
    xingzai阅读 629评论 0 1
  • 题目链接难度:困难 类型:动态规划 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1...
    wzNote阅读 5,356评论 0 0
  • 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 代码
    vbuer阅读 413评论 0 0
  • 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 思路: 每一行计算高度,...
    薄荷糖的味道_fb40阅读 520评论 0 0
  • 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
    夜心_d5bb阅读 156评论 0 0

友情链接更多精彩内容