Problem: 3148. 矩阵中的最大得分
Java
class Solution {
public int maxScore(List<List<Integer>> g) {
int n = g.size(); // 获取矩阵的行数
int m = g.get(0).size(); // 获取矩阵的列数
int inf = 1 << 30; // 定义一个非常大的值,用于模拟正无穷大
int ans = -inf; // 初始化结果为负无穷大,表示最大总得分
int[][] f = new int[n][m]; // 创建二维数组,存储到达每个位置的最小路径值
// 遍历矩阵中的每个元素
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
int t = inf; // 初始化t为正无穷大
// 如果当前不是第一行,则考虑从上方移动到当前位置的情况
if(i > 0){
t = Math.min(t, f[i-1][j]); // 更新t为上方路径的最小值
}
// 如果当前不是第一列,则考虑从左侧移动到当前位置的情况
if(j > 0){
t = Math.min(t, f[i][j-1]); // 更新t为左边路径的最小值
}
// 计算当前格子可能的最大得分,并更新全局最大得分
ans = Math.max(ans, g.get(i).get(j) - t);
// 记录到达当前格子的最小路径值
f[i][j] = Math.min(g.get(i).get(j), t);
}
}
return ans; // 返回最终计算出的最大总得分
}
}