当前位置: 首页 > news >正文

力扣第85题-最大矩形

力扣链接:85. 最大矩形 - 力扣(LeetCode)

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。
输入:matrix = [["0"]]
输出:0
输入:matrix = [["1"]]
输出:1
"""
思路:
此题和84题思路一样,只是增加的条件,我们可以把他看成多层叠加的
我们可以把二维数组转换成1维的高度数组
[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]
]
我们可以看成4个一维的高度数组,高度就是当前行的位置1增加,如果当前行的位置为0则高度就是0第1行为底的柱子:["1","0","1","0","0"]  max = 1
第2行为底的柱子:["2","0","2","1","1"]  max = 3
第3行为底的柱子:["3","1","3","2","2"]  max = 6
第4行为底的柱子:["4","0","0","3","0"]  max = 4"""
from platform import mac_verdef maximalRectangle(matrix):m = len(matrix)n = len(matrix[0])heights_list = []heights = [0] * n# 遍历每一行for i in range(m):for j in range(n):# 如果当前位置是 '1',则增加高度,否则高度为 0if matrix[i][j] == '1':heights[j] = heights[j] + 1else:heights[j] = 0# heights_list.append(heights[:])   # 此处有坑,heights[:]等于copy,不然append的都是最后一个 heightsheights_list.append(heights.copy())# 这里就可以调用84题的方法来处理def largestRectangleArea(heights):max_area = 0  # 记录最大值for i in range(len(heights)):  # 循环遍历每一个索引位置p = i  # 初始p为当前的i的位置while p < len(heights):  # p到达数组末尾,结束循环if heights[p] == 0:  # 当p位置的值是0的时候,直接跳出循环,因为0高度,不能构成矩形breakw = p - i + 1  # 计算当前p位置到i位置的宽度cur_value = w * min(heights[i:p + 1])  # 高取当前i和p位置数组中的最小的值,矩形面积是有最矮的构成的来决定的max_area = max(max_area, cur_value)  # 更新最大面积的值p = p + 1  # 指针右移动return max_areamax_area = 0for heights in heights_list:value = largestRectangleArea(heights)max_area = max(max_area, value)return max_areaprint(maximalRectangle([["1", "0", "1", "0", "0"], ["1", "0", "1", "1", "1"], ["1", "1", "1", "1", "1"], ["1", "0", "0", "1", "0"]]))
print(maximalRectangle([["1"]]))
print(maximalRectangle([["0"]]))

相关文章:

  • Java中对JSON的操作
  • StarRocks 3.5 新特性解读:Snapshot 快照恢复、大导入性能全面升级、分区管理更智能
  • redisson看门狗实现原理
  • OD 算法题 B卷【阿里巴巴找黄金宝箱4】
  • Vue 与react 生命周期对比
  • 机器学习-02(深度学习的基本概念)
  • chapter02_AbstractBeanfactory与模板方法
  • 力扣第87题-扰乱字符串
  • 支持向量机(SVM)在医疗诊断:医学影像领域的应用与实现
  • 现代 JavaScript (ES6+) 入门到实战(八):总结与展望 - 成为一名现代前端开发者
  • 现代 JavaScript (ES6+) 入门到实战(五):告别回调地狱,Promise 完全入门
  • PCB工艺学习与总结-20250628
  • Ubuntu20 编译安装 Redis7.2.4
  • MySQL 安装使用教程
  • Ubuntu22 安装 RTX 5070 Ti Nvidia Driver 驱动
  • NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)
  • docker启动xxl-job 网络问题
  • 解锁Ubuntu安装:从新手到高手的通关秘籍
  • 在Mac上查找并删除Java 21.0.5
  • 阶乘求和全解析:从 Python 秒过到 C++ 手写高精度