Leetcode练习(Python):数组类:第85题:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。


题目:
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
思路:
使用head和tail来构建以某点为基准的矩形的宽,使用height来定义以某点为基准的矩形的高。
程序:
class Solution:
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        if not matrix:
            return 0
        row = len(matrix)
        column = len(matrix[0])
        if row <= 0:
            return 0
        if column <= 0:
            return 0
        head = [-1] * column
        tail = [column] * column
        height = [0] * column
        result = 0
        for index1 in range(row):
            current_head = -1
            current_tail = column
            for index2 in range(column):
                if matrix[index1][index2] == "1":
                    height[index2] += 1
                else:
                    height[index2] = 0
            for index2 in range(column):
                if matrix[index1][index2] == "1":
                    head[index2] = max(head[index2], current_head)
                else:
                    head[index2] = -1
                    current_head = index2
            for index2 in range(column - 1, -1, -1):
                if matrix[index1][index2] == "1":
                    tail[index2] = min(tail[index2], current_tail)
                else:
                    tail[index2] = column
                    current_tail = index2
            for index2 in range(column):
                result = max(result, (tail[index2] - head[index2] - 1) * height[index2])
        return result


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 Leetcode练习(Python):数组类:第54题:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积? Leetcode练习(Python):数组类:第209题:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。 Leetcode练习(Python):数学类:第223题:矩形面积:在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。 每个矩形由其左下顶点和右上顶点坐标表示,如图所示。 Leetcode练习(Python):数组类:第152题:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。 Leetcode练习(Python):数组类:第79题:给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 Leetcode练习(Python):回溯算法类:第47题:全排列 II:给定一个可包含重复数字的序列,返回所有不重复的全排列。 Leetcode练习(Python):数组类:第78题:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 LeetCode: 221_Maximal Square | 二维0-1矩阵中计算包含1的最大正方形的面积 | Medium Leetcode练习(python):字符串类:第93题:复原IP地址:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM