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;
}
相关推荐
小超人诞生日记15 分钟前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂24 分钟前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
老师我太想进步了20261 小时前
【数据结构-1】例解算法复杂度
数据结构·算法
tyler_download1 小时前
deepseek后训练算法:位置编码算法RoPE详解1
算法
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:分层图最短路解析
c++·python·算法·bfs·信息学竞赛
YSL0701242 小时前
一文通关-----排序
数据结构·算法
ZhengEnCi12 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考13 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
蹊黎13 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
夜不会漫长15 小时前
C++:红黑树
数据结构·算法