Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix such that its sum is no larger than k.
Example:
Input: matrix = [[1,0,1],[0,-2,3]], k = 2
Output: 2
Explanation: Because the sum of rectangle [[0, 1], [-2, 3]] is 2,
and 2 is the max number no larger than k (k = 2).
Note:
The rectangle inside the matrix must have an area > 0.
What if the number of rows is much larger than the number of columns?
classSolution {privateintmaxSumSubArray(int[] arr,int k) {int max =Integer.MIN_VALUE;int currSum =0;TreeSet<Integer> set =newTreeSet();set.add(0);for (int i =0; i <arr.length; i++) { currSum += arr[i];Integer gap =set.ceiling(currSum - k);if (gap !=null) max =Math.max(max, currSum - gap);set.add(currSum); }return max; }publicintmaxSumSubmatrix(int[][] matrix,int target) {if (matrix.length==0)return0;int ans =Integer.MIN_VALUE;for (int i =0; i < matrix[0].length; i++) {int[] sum =newint[matrix.length];for (int j = i; j < matrix[0].length; j++) {for (int k =0; k <matrix.length; k++) sum[k] += matrix[k][j];int bestSum =maxSumSubArray(sum, target); ans =Math.max(ans, bestSum);if (ans == target)return ans; } }return ans; }}