前言
###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.矩阵的最大非负积
题目链接: 1594. 矩阵的最大非负积 - 力扣(LeetCode)
题面:
附上大佬代码:
java
class Solution {
public int maxProductPath(int[][] grid) {
final int MOD = 1000000000 + 7;
int m = grid.length, n = grid[0].length;
// 初始化 maxgt 和 minlt 数组,保存第一行的值
long[] maxgt = new long[n];
long[] minlt = new long[n];
maxgt[0] = minlt[0] = grid[0][0];
// 初始化第一的 maxgt 和 minlt
for (int i = 1; i < n; i++) {
maxgt[i] = maxgt[i - 1] * grid[0][i];
minlt[i] = minlt[i - 1] * grid[0][i];
}
// 从第二行开始处理
for (int i = 1; i < m; i++) {
// 更新第一列的 maxgt 和 minlt
maxgt[0] *= grid[i][0];
minlt[0] *= grid[i][0];
for (int j = 1; j < n; j++) {
if (grid[i][j] >= 0) {
maxgt[j] = Math.max(maxgt[j], maxgt[j - 1]) * grid[i][j];
minlt[j] = Math.min(minlt[j], minlt[j - 1]) * grid[i][j];
} else {
long tempMax = maxgt[j]; // 暂存当前值
maxgt[j] = Math.min(minlt[j], minlt[j - 1]) * grid[i][j];
minlt[j] = Math.max(tempMax, maxgt[j - 1]) * grid[i][j];
}
}
}
// 最终结果为右下角的 maxgt
if (maxgt[n - 1] < 0) {
return -1;
} else {
return (int) (maxgt[n - 1] % MOD);
}
}
}
后言
上面是动态规划相关的习题,共勉