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):动态规划类:第221题:最大正方形:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 Leetcode练习(Python):数学类:第67题:二进制求和:给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 Leetcode练习(Python):第485题:最大连续1的个数:给定一个二进制数组, 计算其中最大连续1的个数。 Leetcode练习(Python):深度优先搜索类:第130题:被围绕的区域:给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 Leetcode练习(Python):数组类:第54题:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 Leetcode练习(Python):数组类:第152题:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。 Leetcode练习(Python):数组类:第53题:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 Leetcode练习(Python):数组类:第59题:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 Leetcode练习(Python):回溯算法类:第47题:全排列 II:给定一个可包含重复数字的序列,返回所有不重复的全排列。 LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM