每日一题
题目
363. 矩形区域不超过 K 的最大数值和
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
题目数据保证总会存在一个数值和不超过 k 的矩形区域。
输入:matrix = [[1,0,1],[0,-2,3]], k = 2
输出:2
解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。
输入:matrix = [[2,2,-1]], k = 3
输出:2
分析
自己分析
拿到一个二位数组,利用dp的思想:
1.首先初始化第一行第一列
2.然后求前n项和,遍历到的位置的大小为他的列-1加上他的行-1
3.如果此时的和等于了k的值,则返回
4.求出最大值
class Solution {
public int maxSumSubmatrix(int[][] matrix, int k) {
int lenY = matrix.length;
int lenX = matrix[0].length;
int max = 0;
int [][]dp = new int[lenY][lenX];
dp[0][0] = matrix[0][0];
if(dp[0][0] == k) return k;
for(int i = 1;i < lenX;i++){
dp[0][i] = matrix[0][i] + dp[0][i-1];
max = Math.max(dp[0][i],max);
if(dp[0][i] == k) return k;
}
for(int i = 1;i < lenY;i++){
dp[i][0] = matrix[i][0] + dp[i-1][0];
max = Math.max(dp[</