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

给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。

题目数据保证总会存在一个数值和不超过 k 的矩形区域。

 

示例 1:

输入:matrix = [[1,0,1],[0,-2,3]], k = 2
输出:2
解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。

示例 2:

输入:matrix = [[2,2,-1]], k = 3
输出:3

 

提示:

 

进阶:如果行数远大于列数,该如何设计解决方案?

## template ```cpp #include using namespace std; class Solution { public: int maxSumSubmatrix(vector> &mat, int k) { int m = mat.size(), n = mat[0].size(); vector> sum(m + 1, vector(n + 1, 0)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + mat[i - 1][j - 1]; } } int ans = INT_MIN; for (int top = 1; top <= m; top++) { for (int bot = top; bot <= m; bot++) { set st; st.insert(0); for (int r = 1; r <= n; r++) { int right = sum[bot][r] - sum[top - 1][r]; auto left = st.lower_bound(right - k); if (left != st.end()) { int cur = right - *left; ans = max(ans, cur); } st.insert(right); } } } return ans; } }; ``` ## 答案 ```cpp ``` ## 选项 ### A ```cpp ``` ### B ```cpp ``` ### C ```cpp ```