给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。
返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。
注意:本题相对书上原题稍作改动
示例:
输入:
[
[-1,0],
[0,-1]
]
输出:[0,1,0,1]
解释:输入中标粗的元素即为输出所表示的矩阵
说明:
1 <= matrix.length, matrix[0].length <= 200
一、动态规划
将二位数组转为一维数组。
class Solution:
def getMaxMatrix(self, matrix: List[List[int]]) -> List[int]:
ans = [0 for _ in range(4)]
row = len(matrix)
colum = len(matrix[0])
max_sum = -sys.maxsize-1
ans1, ans2 = -1, -1
for i in range(row):
#b[0]存储每列和
b = [0 for _ in range(colum)]
for j in range(i, row):
ssum = 0
for k in range(colum):
b[k] += matrix[j][k]
if ssum > 0: