难度困难61收藏分享切换为英文接收动态反馈
给定一个正整数、负整数和 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
对每一行维护一个前缀和数组,这样就能方便的通过两个位置的前缀和差计算出区间和。构建dp数组,dp[k][i][j]代表利用到前k行为止,使用第k行及向上的i到j列构建矩阵的最大和(类似于最大子序列和),转移方程如下: