博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
256. Paint House房屋染色
阅读量:4992 次
发布时间:2019-06-12

本文共 2127 字,大约阅读时间需要 7 分钟。

[抄题]:

There are a row of n houses, each house can be painted with one of the three colors: red, blue or green. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.

The cost of painting each house with a certain color is represented by a n x 3 cost matrix. For example, costs[0][0] is the cost of painting house 0 with color red; costs[1][2] is the cost of painting house 1 with color green, and so on... Find the minimum cost to paint all houses.

 [暴力解法]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

以为要用i , j的二维矩阵:就3种情况,枚举所有情况就行了

[一句话思路]:

求和取前一步最小值,从而实现步步最小

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 理解过程:把所有值都累加到nums[n]中

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

 求和类型的三步dp,套用坐标型模板

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[关键模板化代码]:

标准格式i = 0,i < n,return f[n - 1]

for (int i = 1; i < n; i++) {            costs[i][0] += Math.min(costs[i - 1][1], costs[i - 1][2]);            costs[i][1] += Math.min(costs[i - 1][0], costs[i - 1][2]);            costs[i][2] += Math.min(costs[i - 1][0], costs[i - 1][1]);        }        //answer        return Math.min(costs[n - 1][0], Math.min(costs[n - 1][1],costs[n - 1][2]));
View Code

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

265. Paint House II 数学问题,感觉并没有什么联系

 [代码风格] :

public class Solution {    /**     * @param costs: n x 3 cost matrix     * @return: An integer, the minimum cost to paint all houses     */    public int minCost(int[][] costs) {        //corner case        if (costs.length == 0 || costs[0].length == 0) {            return 0;        }        //get sum        int n = costs.length;        for (int i = 1; i < n; i++) {            costs[i][0] += Math.min(costs[i - 1][1], costs[i - 1][2]);            costs[i][1] += Math.min(costs[i - 1][0], costs[i - 1][2]);            costs[i][2] += Math.min(costs[i - 1][0], costs[i - 1][1]);        }        //answer        return Math.min(costs[n - 1][0], Math.min(costs[n - 1][1],costs[n - 1][2]));    }}
View Code

 

转载于:https://www.cnblogs.com/immiao0319/p/8557361.html

你可能感兴趣的文章
Ubuntu下Hadoop的安装和配置
查看>>
VS2010中生成遇到的 web.config 问题
查看>>
Nginx安装部署(反向代理与负载均衡)
查看>>
2018年最新小程序一键智能生成平台限时限量销售!
查看>>
集合遍历过程iterator, 添加删除元素报异常
查看>>
echarts一些笔记
查看>>
最长上升子序列
查看>>
Java-面向对象
查看>>
salesforce 零基础学习(四十四)实现checkbox列表简单过滤功能
查看>>
Android 异步下载
查看>>
c# 中 利用 CookieContainer 对 Cookie 进行序列化和反序列化校验
查看>>
Leetcode 743. Closest Leaf in a Binary Tree
查看>>
如何用Java实现反转排序
查看>>
自己动手写字符串库函数 一(C语言实现) 分类: C语言学习 ...
查看>>
说说接口封装
查看>>
Linux Supervisor的安装与使用入门---SuSE
查看>>
C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
查看>>
oracle查锁表
查看>>
PHP SSH2 不支持 IdentityFile
查看>>
eclipse 僵死/假死 问题排查及解决
查看>>