矩形区域不超过 K 的最大数值和

给定一个非空二维矩阵 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

 

posted on 2021-03-04 21:06  QzZq  阅读(283)  评论(0)    收藏  举报

导航