【每日一题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

目录
相关文章
|
8月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
8月前
【每日一题Day264】LC931下降路径最小和 | dp
【每日一题Day264】LC931下降路径最小和 | dp
56 0
|
8月前
【每日一题Day168】LC2427公因子的数目 | 模拟
【每日一题Day168】LC2427公因子的数目 | 模拟
49 1
|
8月前
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
65 0
|
8月前
|
索引
【每日一题Day183】LC1187使数组严格递增 | dp
【每日一题Day183】LC1187使数组严格递增 | dp
44 0
|
算法
【学会动态规划】下降路径最小和(8)
【学会动态规划】下降路径最小和(8)
48 0
|
8月前
|
机器学习/深度学习
动态规划|【路径问题】|931.下降路径最小和
动态规划|【路径问题】|931.下降路径最小和
|
8月前
LeetCode题:931下降路径最小和
LeetCode题:931下降路径最小和
55 0
|
8月前
【每日一题Day262】LC1911最大子序列交替和 | dp
【每日一题Day262】LC1911最大子序列交替和 | dp
40 0
|
8月前
【每日一题Day138】LC1653使字符串平衡的最少删除次数 | 前后缀 动态规划
【每日一题Day138】LC1653使字符串平衡的最少删除次数 | 前后缀 动态规划
63 0

热门文章

最新文章