Given an m x n
matrix matrix
and an integer k
, return the max sum of a rectangle in the matrix such that its sum is no larger than k
.
It is guaranteed that there will be a rectangle with a sum no larger than k
.
Example 1:
Input: matrix = [[1,0,1],[0,-2,3]], k = 2 Output: 2 Explanation: Because the sum of the blue rectangle [[0, 1], [-2, 3]] is 2, and 2 is the max number no larger than k (k = 2).
Example 2:
Input: matrix = [[2,2,-1]], k = 3 Output: 3
Constraints:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-100 <= matrix[i][j] <= 100
-105 <= k <= 105
class Solution { public int maxSumSubmatrix(int[][] matrix, int k) { int m = matrix.length, n = matrix[0].length; int[][] dp = new int[m + 1][n + 1]; for(int i = 1; i <= m; i++) { for(int j = 1; j <= n; j++) { dp[i][j] = matrix[i - 1][j - 1] + dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1]; } } int res = Integer.MIN_VALUE; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { for(int q = i; q < m; q++) { for(int l = j; l < n; l++) { int cur = dp[q + 1][l + 1] - dp[i][l + 1] - dp[q + 1][j] + dp[i][j]; if(cur > k) continue; else if(cur == k) return k; else res = Math.max(res, cur); } } } } return res; } }
飞天大草,用304的2d range sum,做完已经要吸氧了