【每日一题Day291】LC1289下降路径最小和 II | dp

简介: 【每日一题Day291】LC1289下降路径最小和 II | dp

下降路径最小和 II【LC1289】

给你一个 n x n 整数矩阵 grid ,请你返回 非零偏移下降路径 数字和的最小值

非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。

image.png

  • 优化:记录上一行最小值和次小值的列下标,本行的每个位置一定是从上一行的最小值或者次小值转移得到的,如果最小值的列下标和本行相同,那么选择次小值;否则选择最小值。
  • 实现
class Solution {
    public int minFallingPathSum(int[][] grid) {
        int n = grid.length, m = grid[0].length;
        // 记录上一行最小值和次小值的列下标
        // 本行的每个位置一定是从上一行的最小值或者次小值转移得到的,如果最小值的列下标和本行相同,那么选择次小值;否则选择最小值
        int first = -1, second = -1;
        for (int i = 0; i < n; i++){
            int min1 = -1, min2 = -1;
            for (int j = 0; j < m; j++){
                if (first != -1 && first != j){
                    grid[i][j] += grid[i - 1][first];
                }else if(second != -1){
                    grid[i][j] += grid[i - 1][second];
                }
                if (min1 == -1 || grid[i][j] < grid[i][min1]){
                    min2 = min1;
                    min1 = j;
                }else if(min2 == -1 || grid[i][j] < grid[i][min2]){
                    min2 = j;
                }
            }
            first = min1;
            second = min2;
        }
        int res = Integer.MAX_VALUE;
        for (int j = 0; j < m; j++){
            res = Math.min(grid[n - 1][j], res);
        }
        return res;
    }
}

image.png

目录
相关文章
|
6月前
【每日一题Day264】LC931下降路径最小和 | dp
【每日一题Day264】LC931下降路径最小和 | dp
39 0
|
6月前
【每日一题Day168】LC2427公因子的数目 | 模拟
【每日一题Day168】LC2427公因子的数目 | 模拟
36 1
|
6月前
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
55 0
|
6月前
【每日一题Day211】LC1079活字印刷 | 回溯 计数dp
【每日一题Day211】LC1079活字印刷 | 回溯 计数dp
54 0
|
6月前
【每日一题Day342】LC2578最小和分割 | 贪心
【每日一题Day342】LC2578最小和分割 | 贪心
44 0
|
算法
【学会动态规划】下降路径最小和(8)
【学会动态规划】下降路径最小和(8)
40 0
|
3月前
|
算法
【算法】模拟算法——数青蛙(medium)
【算法】模拟算法——数青蛙(medium)
|
6月前
LeetCode题:931下降路径最小和
LeetCode题:931下降路径最小和
45 0
|
6月前
【每日一题Day241】LC1254统计封闭岛屿的数目 | dfs
【每日一题Day241】LC1254统计封闭岛屿的数目 | dfs
45 1
|
6月前
【每日一题Day262】LC1911最大子序列交替和 | dp
【每日一题Day262】LC1911最大子序列交替和 | dp
36 0