当前位置: 首页 > news >正文

JAVA学习-练习试用Java实现“矩形区域不超过 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

解答思路:

以下是使用 Java 实现的解决方案:

import java.util.TreeSet;public class MaxSumSubmatrix {public int maxSumSubmatrix(int[][] matrix, int k) {int rows = matrix.length;int cols = matrix[0].length;int maxSum = Integer.MIN_VALUE;for (int left = 0; left < cols; left++) {int[] rowSums = new int[rows];for (int right = left; right < cols; right++) {for (int row = 0; row < rows; row++) {rowSums[row] += matrix[row][right];}TreeSet<Integer> set = new TreeSet<>();set.add(0);int runningSum = 0;for (int sum : rowSums) {runningSum += sum;Integer ceiling = set.ceiling(runningSum - k);if (ceiling!= null) {maxSum = Math.max(maxSum, runningSum - ceiling);}set.add(runningSum);}}}return maxSum;}public static void main(String[] args) {int[][] matrix = {{1, 0, 1}, {0, -2, 3}};int k = 2;MaxSumSubmatrix solution = new MaxSumSubmatrix();int maxSum = solution.maxSumSubmatrix(matrix, k);System.out.println("矩阵内部矩形区域的不超过 k 的最大数值和为:" + maxSum);}
}


上述代码中,使用了一个嵌套的循环来遍历矩阵的每一个可能的子矩阵。通过计算每一行的和,然后使用'TreeSet'来维护一个有序的前缀和集合。对于每个前缀和,在集合中查找不超过当前前缀和减去 k 的最大元素,更新最大数值和。最后返回最大数值和。在'main'方法中,构建了一个示例矩阵和 k 值,并调用'maxSumSubmatrix'方法计算并输出结果。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)


http://www.mrgr.cn/news/43021.html

相关文章:

  • 浏览器指纹
  • IIOT工业物联网的标准与互操作性—SunIOT
  • 【吊打面试官系列-MySQL面试题】什么是锁?
  • ubuntu增加swap
  • 15 Shell Script sed命令
  • 如何在银河麒麟服务器中获取关键日志信息
  • LabVIEW提高开发效率技巧----使用动态事件
  • 28 基于51单片机的两路电压检测(ADC0808)
  • JS | JavaScript中document.write()有哪些用法?
  • 如何少走弯路,成为一名炒股高手?
  • MySQL的ON DUPLICATE KEY UPDATE和REPLACE INTO
  • PHP永久性Cookie的含义
  • 基于STM32的智能窗帘控制系统设计
  • 2025,新的方向在哪?
  • Java基础知识总结(超详细整理)
  • 【移动端开发】响应式设计
  • BERT论文解读及情感分类实战(论文复现)
  • 函数式编程语言介绍
  • Java开发必知必会的一些工具
  • CategoriesController