最大子矩阵
给定一个正整数、负整数和 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
#include <vector> using namespace std; class Solution { public: vector<int> getMaxMatrix(vector<vector<int>> &matrix) { int m = matrix.size(); int n = matrix[0].size(); int maxV = matrix[0][0]; int maxX1 = 0; int maxY1 = 0; int maxX2 = 0; int maxY2 = 0; for (int i = 0; i < m; ++i) { vector<int> temp(n, 0); for (int j = i; j < m; ++j) { for (int k = 0; k < n; ++k) { temp[k] += matrix[j][k]; } int maxPre = temp.front(); int l = 0; for (int k = 1; k < n; ++k) { if (maxPre < 0) { maxPre = temp[k]; l = k; } else { maxPre = maxPre + temp[k]; } if (maxPre > maxV) { maxV = maxPre; maxX1 = i; maxX2 = j; maxY1 = l; maxY2 = k; } } } } return vector<int>{maxX1, maxY1, maxX2, maxY2}; } }; int main() { vector<vector<int>> nums{{-1, 0}, {0, -1}}; Solution s; s.getMaxMatrix(nums); }
浙公网安备 33010602011771号