# 矩形区域不超过 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
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-100 <= matrix[i][j] <= 100
-105 <= k <= 105
进阶:如果行数远大于列数,该如何设计解决方案?
## template ```python import bisect class Solution: def maxSumSubmatrix(self, matrix: List[List[int]], k: int) -> int: m = len(matrix) Row, Col = len(matrix), len(matrix[0]) res = float("-inf") for ru in range(Row): col_sum = [0 for _ in range(Col)] for rd in range(ru, Row): for c in range(Col): if matrix[rd][c] == k: return k col_sum[c] += matrix[rd][c] presum = [0] cur_sum = 0 for colsum in col_sum: cur_sum += colsum idx = bisect.bisect_left(presum, cur_sum - k) if idx < len(presum): res = max(res, cur_sum - presum[idx]) if res == k: return k bisect.insort(presum, cur_sum) return res ``` ## 答案 ```python ``` ## 选项 ### A ```python ``` ### B ```python ``` ### C ```python ```