LeetCode //C - 1289. Minimum Falling Path Sum II

1289. Minimum Falling Path Sum II

Given an n x n integer matrix grid, return the minimum sum of a falling path with non-zero shifts.

A falling path with non-zero shifts is a choice of exactly one element from each row of grid such that no two elements chosen in adjacent rows are in the same column.

Example 1:

Input: grid = \[1,2,3,4,5,6,7,8,9]

Output: 13

Explanation:

The possible falling paths are:

1,5,9, 1,5,7, 1,6,7, 1,6,8,

2,4,8, 2,4,9, 2,6,7, 2,6,8,

3,4,8\], \[3,4,9\], \[3,5,7\], \[3,5,9

The falling path with the smallest sum is 1,5,7, so the answer is 13.

Example 2:

Input: grid = \[7]

Output: 7

Constraints:
  • n == grid.length == gridi.length
  • 1 <= n <= 200
  • -99 <= gridij <= 99

From: LeetCode

Link: 1289. Minimum Falling Path Sum II


Solution:

Ideas:

For each row, find the smallest and second-smallest sums from the previous row, then avoid using the smallest when it is in the same column.

Code:
c 复制代码
int minFallingPathSum(int** grid, int gridSize, int* gridColSize) {
    int n = gridSize;

    for (int row = 1; row < n; row++) {
        int min1 = 1000000000;
        int min2 = 1000000000;
        int minCol = -1;

        // Find the smallest and second smallest values in the previous row.
        for (int col = 0; col < n; col++) {
            int value = grid[row - 1][col];

            if (value < min1) {
                min2 = min1;
                min1 = value;
                minCol = col;
            } else if (value < min2) {
                min2 = value;
            }
        }

        // Use min2 when the smallest value is in the same column.
        for (int col = 0; col < n; col++) {
            if (col == minCol) {
                grid[row][col] += min2;
            } else {
                grid[row][col] += min1;
            }
        }
    }

    int answer = grid[n - 1][0];

    for (int col = 1; col < n; col++) {
        if (grid[n - 1][col] < answer) {
            answer = grid[n - 1][col];
        }
    }

    return answer;
}
相关推荐
CCblandy1 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
himobrinehacken2 小时前
取模运算的汇编奥秘揭秘
c语言·安全
mmmmath_32 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
YangYang9YangYan3 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl23 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风3 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技3 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程4 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法