zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 363 矩形区域不超过 K 的最大数值和

    363. 矩形区域不超过 K 的最大数值和

    给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和。

    示例:

    输入: matrix = [[1,0,1],[0,-2,3]], k = 2
    输出: 2
    解释: 矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。
    说明:

    矩阵内的矩形区域面积必须大于 0。
    如果行数远大于列数,你将如何解答呢?

    class Solution {
    
     
    public static int maxSumSubmatrix(int[][] matrix, int k) {
        int m = matrix.length;
        int n = matrix[0].length;
        int[][] sums = new int[m][n];
    
        /**
         * 按照列来求和
         */
        for(int col = 0 ; col < n; col ++){
            for(int row = 0 ; row < m ; row ++){
                if(row == 0)
                    sums[row][col] = matrix[row][col];
                else
                    sums[row][col] = sums[row - 1][col] + matrix[row][col];
            }
        }
    
        /**
         * col1为矩阵起始列,col2为矩阵结尾列
         */
        int result = Integer.MIN_VALUE ;
         for(int col1 = 0 ; col1 < n ; col1 ++){
            for(int col2 = col1; col2 < n ; col2++){
                /**
                 * set中都是存放的是startCol和endCol相同的矩阵的和
                 */
                TreeSet<Integer> set = new TreeSet<>();
                set.add(0);
                for(int row = 0 ; row < m ; row++){
                    int sum = 0;  //子矩阵的和
                    for(int i = col1; i <= col2 ; i ++){
                        sum += sums[row][i];
                    }
    
                    //求出set中大于等于(sum - k)最小值
                    if(set.ceiling(sum - k) != null){
                        int max = sum - set.ceiling(sum - k);
                        result = result > max ? result : max;
                    }
                    set.add(sum);
                }
            }
        }
        return result;
    }
    }
    
  • 相关阅读:
    HDU3461 Code Lock 并查集应用
    记录,待总结8
    HDU1325 Is It A Tree?
    函数指针总结
    记录,待总结6
    HDU1272 小希的迷宫 并查集
    记录,待总结10
    记录,待总结9
    C# 获取radiobutton的值
    解决idea控制台tomcat输出中文乱码
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075817.html
Copyright © 2011-2022 走看看