当前位置: 首页 > news >正文

多维动态规划题解——最小路径和【LeetCode】空间优化一维数组

一、算法逻辑(逐步思路)

❓ 题目描述:

给定一个 m × n 的非负整数网格 grid,从左上角出发,只能向右或向下走,求走到右下角的路径中,路径权值之和最小是多少。


✅ 解题思路(动态规划 + 一维滚动数组)

1. 状态定义:
  • 定义一维数组 f[j+1] 表示当前处理行中,到达第 j 列位置的最小路径和;
  • 数组长度为 n + 1,其中 f[0] 永远不会使用,目的是简化边界处理
2. 初始化:
f = [inf] * (n + 1)
f[1] = 0
  • 初始化第一行前的“虚拟入口”为 0,使得第一个格子 grid[0][0] 可以自然转移;
  • 其余设为 inf,保证转移时不会取到非法路径。
3. 状态转移:
f[j + 1] = min(f[j], f[j + 1]) + x
  • f[j] 是左边来的;
  • f[j + 1] 是上边来的(因为当前是新一行,但数组中仍是旧值);
  • x 是当前格子 grid[i][j] 的值;
  • 取这两个来源的最小路径,加上当前值,更新当前位置的路径和。
4. 返回结果:
  • 走到最右下角 grid[m-1][n-1],对应一维数组的 f[n]

二、算法核心点

✅ 核心思想:二维动态规划的空间优化

  • 每个格子只依赖它左边上边的状态,因此一行一行滚动更新就足够;
  • 使用一维数组 f 来记录当前行的最小路径和,循环内覆盖更新;
  • 边界偏移技巧使得代码无需特判第一行第一列。
class Solution:def minPathSum(self, grid: List[List[int]]) -> int:n = len(grid[0])f = [inf] * (len(grid[0]) + 1)f[1] = 0for row in grid:for j, x in enumerate(row):f[j + 1] = min(f[j], f[j + 1]) + xreturn f[n]

三、复杂度分析

  • 时间复杂度:O(m × n)
    • 每个格子访问一次。
  • 空间复杂度:O(n)
    • 只需要一个一维数组长度为 n+1

总结表

维度

内容

✅ 思路逻辑

一维数组滚动更新当前行,取左/上最小路径和 + 当前值

✅ 核心技巧

空间优化 + 偏移一位避免边界判断

✅ 时间复杂度

O(m × n)

✅ 空间复杂度

O(n)


✅ 举例说明

grid = [[1, 3, 1],[1, 5, 1],[4, 2, 1]
]
  • 初始 f: [inf, 0, inf, inf]
  • 第一行更新后: [inf, 1, 4, 5]
  • 第二行更新后: [inf, 2, 7, 6]
  • 第三行更新后: [inf, 6, 8, 7]
  • 最终答案为 f[3] = 7

路径为:1 → 3 → 1 → 1 → 1

http://www.dtcms.com/a/283337.html

相关文章:

  • Java设计模式之-组合模式
  • Fiddler 中文版 API 调试与性能优化实践 官方中文网全程支持
  • 怎么删除 wps 的右键菜单
  • Android-EDLA【CTS】CtsMediaRecorderTestCases存在fail
  • 初等数论简明教程
  • watermark的作用
  • 剑指offer63_扑克牌的顺子
  • 如何加快golang编译速度
  • Cursor区域限制问题解决方案:AI模型访问技术突破与环境隔离实践
  • 如何在硬件中进行有效地调试
  • SIMATIC HMIWinCC UnifiedPerformance Insight - 使用 KPI 优化流程
  • 冰岛人(map)
  • Java破解零工市场“真需求”
  • Day04_C语言网络编程20250716
  • 认识ETL流程:数据工程的基石
  • 暑期自学嵌入式——Day04(C语言阶段)
  • 深度学习中的注意力机制:原理、应用与实践
  • 【Linux】如何使用nano创建并编辑一个文件
  • 暑期算法训练.2
  • PHP8.5.0 Alpha 1 正式发布!
  • 1_需求规格编写提示词_AI编程专用简化版
  • 华为OD机试_2025 B卷_完美走位(Python,100分)(附详细解题思路)
  • mongodb操作巨鹿
  • 9.IEnumerable可枚举接口 C#例子 WPF例子
  • NE综合企业网络实验:从VLAN到OSPF全配置
  • MEF 在 WPF 中的简单应用
  • sky-take-out项目中的切点
  • 工控机内Docker容器间Socket通信实现
  • 继电器驱动电路注意的坑
  • AI产品经理面试宝典第30天:AI+教育个性化学习与知识图谱相关面试题的解答指导