营销型网站建设步骤,企业文化的重要性和意义,ai生成网页设计,apache搭建网站给你一个 m x n 的矩阵 matrix 和一个整数 k #xff0c;找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
题目数据保证总会存在一个数值和不超过 k 的矩形区域。
示例 1#xff1a;
输入#xff1a;matrix [[1,0,1],[0,-2,3]], k 2 输出#xff1a;2 解释…给你一个 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。
解题思路
枚举上下边界确定了上下边界以后利用一维数组记录每一列的和就可以通过这个一维数组计算得出当前上下边界固定的情况下所有子矩阵的和公式为Sr-SlkSr为前R列的矩阵和Sl为前l列的矩阵和Sr-Sl即为l-r列的子矩阵和枚举Sr通过TreeSet查找满足Sr-Slk的Sl。
代码
class Solution {public int maxSumSubmatrix(int[][] matrix, int k) {int nmatrix.length,mmatrix[0].length;int resInteger.MIN_VALUE;for (int i 0; i n; i) {int[] sum new int[m];for (int j i; j n; j) {for (int p 0; p m; p) {sum[p]matrix[j][p];}TreeSetInteger set new TreeSet();int cur0;set.add(0);for (int l : sum) {curl;//sr-kslInteger ceiling set.ceiling(cur - k);if(ceiling!null)resMath.max(res,cur-ceiling);set.add(cur);}}}return res;}
}