剑指 Offer II 091. 粉刷房子

剑指 Offer II 091. 粉刷房子

动态规划
当前粉刷房子的花费可以由上一家粉刷房子的花费推导出来,所以可以使用动态规划求解这道题。
首先确定dp数组的含义,每个房子都可以被粉刷成三种颜色,那么自然而然可以得到数组
dp[i][j]
粉刷到第i个房子j颜色一共花的钱,i表示房子的数目,j表示颜色的种类。
初始化数组,就是第0间房子各种颜色的花费。
递推公式:dp[i][0] = costs[i][0] + Math.min(dp[i – 1][1], dp[i – 1][2]);
当前房子颜色为j时总花费 = 当前房子颜色为j时的花费 + 上一个房子颜色不为j(另外两种颜色)时的总花费的最小值
结果为最后一间房子三种颜色的最小值。
代码如下:

class Solution {
    public int minCost(int[][] costs) {
        int len = costs.length;
        int[][] dp = new int[len][3];
        for (int i = 0; i < 3; i++) {
            dp[0][i] = costs[0][i];
        }
        for (int i = 1; i < len;i++) {
            dp[i][0] = costs[i][0] + Math.min(dp[i - 1][1], dp[i - 1][2]);
            dp[i][1] = costs[i][1] + Math.min(dp[i - 1][0], dp[i - 1][2]);
            dp[i][2] = costs[i][2] + Math.min(dp[i - 1][0], dp[i - 1][1]);
        }
        return Math.min(dp[len - 1][0], Math.min(dp[len - 1][1], dp[len - 1][2]));
    }
}

由于当前状态完全由上一状态确定,所以可以使用滚动数组压缩状态,将空间复杂度降为1。
优化如下:

class Solution {
    public int minCost(int[][] costs) {
        int len = costs.length;
        int[][] dp = new int[2][3];
        for (int i = 0; i < 3; i++) {
            dp[0][i] = costs[0][i];
        }
        for (int i = 1; i < costs.length;i++) {
            dp[1][0] = costs[i][0] + Math.min(dp[0][1], dp[0][2]);
            dp[1][1] = costs[i][1] + Math.min(dp[0][0], dp[0][2]);
            dp[1][2] = costs[i][2] + Math.min(dp[0][0], dp[0][1]);
            for (int j = 0; j < 3; j++) {
                dp[0][j] = dp[1][j];
            }
        }
        return len == 1 ? Math.min(dp[0][0], Math.min(dp[0][1], dp[0][2])) : Math.min(dp[1][0], Math.min(dp[1][1], dp[1][2]));
    }
}

原文:https://leetcode.cn/problems/JEj789/solution/jian-dan-dp-by-nice-hermann9a2-81ol/

Original: https://www.cnblogs.com/liangren-na/p/16437713.html
Author: 良人呐
Title: 剑指 Offer II 091. 粉刷房子

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622206/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 1480. 一维数组的动态和

    给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示例 …

    数据库 2023年6月16日
    0108
  • 什么是真正的HTAP?(二)挑战篇

    上一篇文章中,我们从技术和商业角度分析了 HTAP 系统缘起的背景,本篇文章中,我们将从 HTAP 定义及其相关核心技术等方面来讨论:构建一个 HTAP 所面临的核心问题和挑战有哪…

    数据库 2023年5月24日
    060
  • day42-反射01

    Java反射01 1.反射(reflection)机制 1.1反射机制问题 一个需求引出反射 请看下面问题: 根据配置文件 re.properties 指定信息,创建Cat对象并调…

    数据库 2023年6月11日
    0126
  • 实时展示用户上传的头像

    实时展示用户上传的头像 总体思路 """ 1.&#x9996;&#x5148;&#x9700;&#x8981;&amp…

    数据库 2023年6月14日
    074
  • 浏览器书签插件配置

    准备远程Git仓库(目前只支持Gitee) 登录后创建仓库(如没有账号请自行注册) 配置Token 进入设置页面配置私人令牌 新增一个令牌(权限) 保存好生成的令牌,此令牌后续无法…

    数据库 2023年6月9日
    083
  • 设计模式之(5)——原型模式

    上篇文章中我们提到单例模式可以避免重复创建消耗资源的对象,但是却不得不共用对象。若是对象本身也不让随意访问修改时,怎么办?那么我们就可以采用原型模式来创建新的实例。 定义:原型模式…

    数据库 2023年6月14日
    066
  • [LeetCode]20. 有效的括号

    给定一个只包括 ‘(‘,’)’,'{‘,’}’,'[‘,’]&#8217…

    数据库 2023年6月9日
    0119
  • 达梦产品技术支持培训-day8-DM8数据库备份与还原-实操

    Disql 工具:联机数据备份与还原,包括库备份、表空间备份与还原、表备份与还原; DMRMAN 工具:脱机数据库备份还原与恢复; 客户端工具 MANAGER和CONSOLE:对应…

    数据库 2023年6月11日
    073
  • JUC学习

    如何正确停止线程? 停止线程应该是一种通知协作的方式,比如interrupt,但是它仅仅是通知线程,线程拥有完全的自主权,根据自身业务来判断什么时候停止,因为如果选择立即停止就可能…

    数据库 2023年6月16日
    099
  • 使用mybatis连接数据库–针对小白

    实现mybatis连接数据库的步骤: 1.建表 2.pom.xml的配置 <?xml version="1.0" encoding="UTF-8…

    数据库 2023年6月11日
    059
  • cobbler部署

    cobbler cobbler 一、cobbler简介 二、cobbler对应关系 三、cobbler工作原理 cobbler部署 进行测试 web界面自动安装 一、cobbler…

    数据库 2023年6月14日
    083
  • 必应咋想的

    首页里弄了个阴森的图片,下面有个山洞,里面有白衣女鬼飘过,还有背景音乐。 看右下角的介绍里有名字叫:万圣节之夜在黑暗树篱 Original: https://www.cnblogs…

    数据库 2023年6月9日
    096
  • Css3入门详解

    一、Css基本语法 1.Html和Css没分开 点击查看代码 <!DOCTYPE html> <html lang="en"> <…

    数据库 2023年6月16日
    084
  • fiddler的mock数据与二次开发示例

    fiddler的使用记录 fiddler了解 上官网下载工具,然后安装使用,https://www.telerik.com/fiddler,如果对该工具不熟悉,还有直白的教程,看过…

    数据库 2023年6月6日
    0114
  • 格林童话之祖父和孙子

    从前有个很老很老的老人,眼睛花,耳朵也背,双膝还不住地发抖。每当他坐在餐桌前 吃饭时,汤匙也握不稳,常常把菜汤撒在桌布上,汤还会从嘴边流出来。儿子和媳妇都嫌弃 他,老人只好躲到灶后…

    数据库 2023年6月9日
    088
  • 谁再说学不会 MySQL 数据库,就把这个给他扔过去!

    大家好,我是民工哥。 又是新的一年奋斗路的开启,相信有不少人农历新年之后,肯定会有所变动(跳槽加薪少不了)。所以,我把往期推送过的MySQL技术文章做了一个相关的整理,基础不好的可…

    数据库 2023年5月24日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球