363.矩形区域不超过K的最大数值和
链接:363.矩形区域不超过K的最大数值和
难度:Hard
标签:数组、二分查找、矩阵、有序集合、前缀和
简介:给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
题解 1 - typescript
- 编辑时间:2021-04-22
- 执行用时:408ms
- 内存消耗:39.7MB
- 编程语言:typescript
- 解法介绍:暴力循环四次。
function maxSumSubmatrix(matrix: number[][], k: number): number {
  const rowLen = matrix.length;
  const colLen = matrix[0].length;
  const dp: number[][] = new Array(rowLen + 1).fill(0).map(_ => new Array(colLen + 1).fill(0));
  let max = -Infinity;
  for (let row = 0; row < rowLen; row++) {
    for (let col = 0; col < colLen; col++) {
      let num = matrix[row][col] + dp[row + 1][col] + dp[row][col + 1] - dp[row][col];
      if (num === k) return k;
      dp[row + 1][col + 1] = matrix[row][col] + dp[row + 1][col] + dp[row][col + 1] - dp[row][col];
      for (let i = 0; i <= row; i++) {
        for (let j = 0; j <= col; j++) {
          const areaNum = num - dp[i][col + 1] - dp[row + 1][j] + dp[i][j];
          if (areaNum === k) return k;
          else if (areaNum < k) max = Math.max(max, areaNum);
        }
      }
    }
  }
  return max;
}