给你一个 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
1.暴力法:
public static int maxSumSubmatrix(int[][] matrix, int k) {if(matrix.length == 0 || matrix[0].length == 0) {return 0;}int rows = matrix.length;//获取数组的长度int cols = matrix[0].length;//获取数组的列数int[] rowSum = new int[rows];//把每一行看成一个值TreeSet<Integer> set = new TreeSet<>();int num = Integer.MIN_VALUE;//与Math.abs(Integer.MIN_VALUE)同,绝对值int colSum;//每列的和for(int s = 0; s < cols; s++) {//开始列Arrays.fill(rowSum, 0);//填充数组for(int e = s; e < cols; e++) {//结束列set.clear();//清除元素set.add(0);colSum = 0;for(int i = 0; i < rows; i++) {rowSum[i] += matrix[i][e];//数组行的和colSum += rowSum[i];//数组列的和Integer temp = set.ceiling(colSum - k);//返回最大值if(temp != null) {num = Math.max(num, colSum - temp);//比较大小}set.add(colSum);}}}System.out.println(num);return num;}public static void main(String [] args) {int [][] m= new int[][]{{1,0,1},{0,-2,3}};int k =2;maxSumSubmatrix(m,k);}

