码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 三角形最小路径和


    1. 动态规划

         2
        3 4
       6 5 7
      4 1 8 3

    题是这样的一次只能走一步,然后求出最短的路径,看到这道题很多人第一反应,双重循环分别去比较每个数的大小,这个思路很不错,让我们在多想一点点,那就是如果双重循环的话就会产生很多次重复的计算,就像斐波那契数列一样如果用普通的遍历,或者是递归计算的话,一般计算机在计算到50的时间计算任务应该是指数级别的增长,假如我们拿出一个数组来记录一下他每次计算的值,这样是不是就省去了好多不必要的计算,同样这道题也可以这样想,我们把计算的结果记录下来这样就避免了重复的计算,这就是动态规划的精华所在。

    • 我们思考几个点,想要计算使用动态规划来解这道题,我们首先看一下这道题有啥规律,经过观察我们发现,假设i是行j是列,第一行只有一个元素的时候我们只能往下走,意思就是i+1第二行就有了两个元素,我们可以选择i+1或者是j+1这种情况,我们观察发现递推公式dp[i][j]=min(dp[i+1][j],dp[i+1][j+1])+value这样的公式。

    • 通常我们解决问题,从下向上解题是比较简单的,所以我们循环的起始下标就为len(array),这样准备好所有条件好我们来看一下具体的go语言代码实现:

    func Min(i, j int) int {
      if i < j {
        return i
      }
      return j
    }
    func minimumTotal(triangle [][]int) int {
      var dp = make([][]int, len(triangle)+1) //创建一个跟三角形外环一样长度的数组
      for i := 0; i < len(triangle)+1; i++ { //因为go语言特性,我们需要给二维数组赋值
        dp[i] = make([]int, len(triangle)+1)
      }
      for i := len(triangle) - 1; i >= 0; i-- {
        for j := 0; j <= i; j++ {
          dp[i][j] = Min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]
        }
      }
      return dp[0][0] //返回最小路径
    }

    上面就是动态规划的解法,时间复杂度在On2,由于使用记忆数组,使得减少了很多的计算量,在实际表现上来看还是不错的。

  • 相关阅读:
    在Node.js项目中使用node-postgres连接postgres以及报错指南
    HTML小游戏9 —— 潜行游戏《侠盗罗宾汉》(附完整源码)
    阿里云易立:以云原生之力,实现大模型时代基础设施能力跃升 | KubeCon 主论坛分享
    怎么使用Cpolar+Lychee搭建私人图床网站并实现公网访问?
    【 OpenGauss源码学习 —— 列存储(CUStorage)】
    中国市场超阿迪耐克 安踏领衔打响国货反击战
    7款最佳的图片编辑App
    信息学奥赛一本通:1104:计算书费
    [ValueError: not enough values to unpack (expected 3, got 2)]
    Springboot2.7.0 集成pagehelper问题解决
  • 原文地址:https://blog.csdn.net/weixin_59554510/article/details/133972564
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号