面试题 17.24
Solutions
class Solution {
public:
vector<int> getMaxMatrix(vector<vector<int>>& matrix) {
if (!matrix.size()) return {};
int m = matrix.size(), n = matrix[0].size();
vector<int> sum(n), rect = {0, 0, 0, 0};
int res = INT_MIN;
// for all possible r1:r2
for (int r1 = 0; r1 < m; r1++) {
fill(sum.begin(), sum.end(), 0);
for (int r2 = r1; r2 < m; r2++) {
int prev = INT_MIN / 2, cur = 0, c1 = 0;
// use method in problem 53
for (int c2 = 0; c2 < n; c2++) {
sum[c2] += matrix[r2][c2];
cur = max(prev + sum[c2], sum[c2]);
if (prev < 0)
c1 = c2;
if (cur > res) {
rect = {r1, c1, r2, c2};
res = cur;
}
prev = cur;
}
}
}
return rect;
}
};Last updated