给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和。
示例:
输入: matrix = [[1,0,1],[0,-2,3]], k = 2
输出: 2
解释: 矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。
说明:
矩阵内的矩形区域面积必须大于 0。
如果行数远大于列数,你将如何解答呢?
#include <vector> #include <iostream> #include <algorithm> using namespace std; class Solution { public: int maxSumSubmatrix(vector<vector<int>> &matrix, int k) { int m = matrix.size(); int n = matrix[0].size(); int maxV = INT32_MIN; 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]; } vector<int> tempA(n + 1, 0); for (int z = 0; z < n; ++z) { tempA[z + 1] = tempA[z] + temp[z]; for (int l = 0; l < z + 1; ++l) { int tempV = tempA[z + 1] - tempA[l]; if (tempV > maxV && tempV <= k) maxV = tempV; } } } } return maxV; } }; int main() { vector<vector<int>> nums{{2, 2, -1}}; Solution s; cout << s.maxSumSubmatrix(nums, 0) << endl; }
我知道我的这个解法很烂,但我不知道有这么烂
TBC
原文:https://www.cnblogs.com/zhangzhangtabszj/p/14483006.html