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