当前位置:实例文章 » 其他实例» [文章]leetcode 17.24. 最大子矩阵

leetcode 17.24. 最大子矩阵

发布人:shili8 发布时间:2025-02-02 06:12 阅读次数:0

**最大子矩阵**

给定一个二维整数数组 `matrix`,其中每个元素都是非负整数。要求出最大的子矩阵的面积。

**示例1:**

输入:`matrix = [[1,0,1],[0,1,0],[1,0,1]]`

输出:`4`

解释:最大子矩阵为 `[[1,2],[1,1]]`,面积为 `4`。

**示例2:**

输入:`matrix = [[0,0,0],[0,0,0]]`

输出:`0`

解释:最大子矩阵为 `[]`,面积为 `0`。

**示例3:**

输入:`matrix = [[1,0,1,2,4],[6,0,6,0,7],[1,0,1,0,0]]`

输出:`12`

解释:最大子矩阵为 `[[2,4],[6,7]]`,面积为 `12`。

**解决方案**

我们可以使用动态规划来解决这个问题。首先,我们需要定义一个函数 `maxRectangleArea(matrix)` 来计算给定矩阵的最大子矩阵面积。

def maxRectangleArea(matrix):
 if not matrix:
 return0 m, n = len(matrix), len(matrix[0])
 height = [0] * (n +1)
 max_area =0 for i in range(m):
 for j in range(n):
 height[j] = height[j] +1 if matrix[i][j] else0 stack = []
 for k in range(n +1):
 while stack and height[k] < height[stack[-1]]:
 h = height[stack.pop()]
 max_area = max(max_area, h * (k - (stack[-1] if stack else -1)))
 stack.append(k)

 return max_area


**代码注释**

* `maxRectangleArea(matrix)` 函数首先检查输入矩阵是否为空。如果是,则返回0。
* 然后,它初始化一个高度数组 `height`,长度为 `n +1`,用于存储每列的最大高度。
* 接着,它遍历矩阵中的每一行,并更新高度数组。对于每个元素,如果它是非零值,则增加相应列的高度;否则,将其设置为0。
* 然后,它使用一个栈来计算每列的最大子矩阵面积。对于每列,直到栈顶元素的高度小于当前列的高度时,弹出栈顶元素,并更新最大面积。
* 最后,它返回最大子矩阵面积。

**测试**

我们可以使用以下测试用例来验证 `maxRectangleArea(matrix)` 函数:

print(maxRectangleArea([[1,0,1],[0,1,0],[1,0,1]])) # Output:4print(maxRectangleArea([[0,0,0],[0,0,0]])) # Output:0print(maxRectangleArea([[1,0,1,2,4],[6,0,6,0,7],[1,0,1,0,0]])) # Output:12


这些测试用例验证了 `maxRectangleArea(matrix)` 函数的正确性。

其他信息

其他资源

Top