• 363. Max Sum of Rectangle No Larger Than K


    Given an m x n matrix matrix and an integer k, return the max sum of a rectangle in the matrix such that its sum is no larger than k.

    It is guaranteed that there will be a rectangle with a sum no larger than k.

    Example 1:

    Input: matrix = [[1,0,1],[0,-2,3]], k = 2
    Output: 2
    Explanation: Because the sum of the blue rectangle [[0, 1], [-2, 3]] is 2, and 2 is the max number no larger than k (k = 2).
    

    Example 2:

    Input: matrix = [[2,2,-1]], k = 3
    Output: 3
    

    Constraints:

    • m == matrix.length
    • n == matrix[i].length
    • 1 <= m, n <= 100
    • -100 <= matrix[i][j] <= 100
    • -105 <= k <= 105
    class Solution {
        public int maxSumSubmatrix(int[][] matrix, int k) {
            int m = matrix.length, n = matrix[0].length;
            int[][] dp = new int[m + 1][n + 1];
            for(int i = 1; i <= m; i++) {
                for(int j = 1; j <= n; j++) {
                    dp[i][j] = matrix[i - 1][j - 1] + dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1];
                }
            }
            int res = Integer.MIN_VALUE;
            for(int i = 0; i < m; i++) {
                for(int j = 0; j < n; j++) {
                    for(int q = i; q < m; q++) {
                        for(int l = j; l < n; l++) {
                            int cur = dp[q + 1][l + 1] - dp[i][l + 1] - dp[q + 1][j] + dp[i][j];
                            if(cur > k) continue;
                            else if(cur == k) return k;
                            else res = Math.max(res, cur);
                        }
                    }
                }
            }
            return res;
        }
    }

    飞天大草,用304的2d range sum,做完已经要吸氧了

  • 相关阅读:
    【转】Java中super和this的几种用法与区别
    公寓上网新认证方式破解研究
    移动设计
    破解哈工程大学深澜认证路由器
    Arch Linux安装记录
    foreach新解
    工具大全(转载)
    Linux 入门
    设置为驼峰命名
    efcore Add-Migration 错误
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/14968506.html
Copyright © 2020-2023  润新知