码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构与算法之LeetCode-剑指 Offer II 091. 粉刷房子-动态规划-DP


    剑指 Offer II 091. 粉刷房子 - 力扣(LeetCode)

    DP 动态规划
    • 建立状态转移方程 dp[i][j]表示粉刷 从0到i号房子,且第i号房子被粉刷成第j种颜色时到最小成本 0<=i<n, 0<=j<3
      • dp[i][0] = Math.minI(dp[i-1][1],dp[i-1][2])+costs[i][0]
      • dp[i][1] = Math.minI(dp[i-1][0],dp[i-1][2])+costs[i][1]
      • dp[i][2] = Math.minI(dp[i-1][0],dp[i-1][1])+costs[i][2]
    • 求得总的状态转移方程 (1<=i<n,0<=j<3)
      • dp[i][j] = Math.min(dp[i-1][(j+1)mod(3)],dp[i-1][(j+2)mod3])+costs[i][j]
    /**
     * @param {number[][]} costs
     * @return {number}
     */
    var minCost = function(costs) {
    	const n = costs.length;
      let dp = new Array(3).fill(0);
      for(let j=0;j<3;j++){
        dp[j] = costs[0][j];
      }
      
      for(let i=1;i<n;i++){
        const dpNew = new Array(3).fill(0);
      	for(let j=0;j<3;j++){
          dpNew[j] = Math.min(dp[(j+1)%3],dp[(j+2)%3]) + costs[i][j];
        }
        dp = dpNew;
      }
      return parseInt(Math.min(...dp));
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    class Solution {
        public int minCost(int[][] cs) {
            int n = cs.length;
            int a = cs[0][0], b = cs[0][1], c = cs[0][2];
            for (int i = 1; i < n; i++) {
                int d = Math.min(b, c) + cs[i][0];
                int e = Math.min(a, c) + cs[i][1];
                int f = Math.min(a, b) + cs[i][2];
                a = d; b = e; c = f;
            }
            return Math.min(a, Math.min(b, c));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 当前刷红,上一个只能是蓝或绿,所以由上一次蓝绿最小值加上当前红的代价得到。
    function minCost(costs: number[][]): number {
        let red = 0, blue = 0, green = 0
        for (const [r, b, g] of costs) {
            [red, blue, green] = [Math.min(blue, green) + r, Math.min(red, green) + b, Math.min(red, blue) + g]
        }
        return Math.min(red, blue, green)
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    var minCost = function(costs){
        let red = 0, green = 0, blue = 0;
        for(const [r,g,b] of costs){
            [red,green,blue] = [Math.min(blue,green)+r,Math.min(red,blue)+g,Math.min(red,green)+b]
        }
        return Math.min(red,green,blue)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行结果:通过

    执行用时:68 ms, 在所有 JavaScript 提交中击败了57.35%的用户

    内存消耗:43.7 MB, 在所有 JavaScript 提交中击败了34.60%的用户

    通过测试用例:100 / 100

    参考链接

    剑指 Offer II 091. 粉刷房子 - 力扣(LeetCode)

    粉刷房子 - 粉刷房子 - 力扣(LeetCode)

    【宫水三叶】简单状态机 DP 运用题 - 粉刷房子 - 力扣(LeetCode)

    [Python/Java/TypeScript/Go] 动态规划 - 粉刷房子 - 力扣(LeetCode)

  • 相关阅读:
    Facebook Messenger链接分享:如何创建链接并设置自动化内容
    线程安全实例 --- 计时器
    微服务高频热点面试题汇总
    [FAQ19892]如何配置为UFS的项目
    【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day10
    彻底卸载Windows Defender
    Jectpack 笔记
    pem文件类解析
    报表开发工具Reports and Dashboards新版本2022.3发布|附下载
    JSP out对象:向客户端输出数据
  • 原文地址:https://blog.csdn.net/qq_25482087/article/details/125465513
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号