「图解大厂面试高频算法题」动态规划-打家劫舍I
PS: 本文为「图解大厂面试高频算法题」专题,主旨是根据“二八法则”的原理,以付出20%的时间成本,获得80%的刷题的收益,让那些想进互联网大厂的人少走些弯路。
PS: 欢迎关注我获取更多大厂面试总结。
原题链接: https://leetcode-cn.com/problems/house-robber/
在LeetCode官网中看到了这样的一个评论
金刀表示世上还是好人多,这位好孩子虽然输了题目,甚至在面试中挂了,但是但是赢了人生哈哈。
甚至有网友表示
如果你是小偷,你怎样才能偷最多的钱呢?
题目介绍
题目解答
这题粗略一看,估计又是一道动态规划题型。有一句话说得好,万事开头难,在动态规划题型中,找出子问题是最关键的,毕竟全局解是一步一步求解子问题来得到的。如果子问题是什么都不知道,那咋求出全局解呢。
寻找子问题
我们先来看看如何寻找子问题。题目的大意是求解从N个房子中能偷取到的最大的金额,这个问题是不是可以拆成N个子问题?
- 从1个房子中能偷取到的最大的金额是多少?
- 从2个房子中能偷取到的最大的金额是多少?
- …
- 从N-1个房子中能偷取到的最大的金额是多少?
- 从N个房子中能偷取到的最大的金额是多少?
注意这题有一个限制就是小偷不能连续偷两个相邻的房子,所以小偷经过一个房子时,他需要思考偷还是不偷,这样每一个子问题又可以继续拆解变成2N个子问题: - 从1个房子中能偷取到的最大的金额是多少?
- 不偷第1个房子时,能偷取到的最大的金额是多少?
- 偷第1个房子时,能偷取到的最大的金额是多少?
- 从2个房子中能偷取到的最大的金额是多少?
- 不偷第2个房子时,能偷取到的最大的金额是多少?
- 偷第2个房子时,能偷取到的最大的金额是多少?
- … …
- 从N-1个房子中能偷取到的最大的金额是多少?
- 不偷第N-2个房子时,能偷取到的最大的金额是多少?
- 偷第N-2个房子时,能偷取到的最大的金额是多少?
- 从N个房子中能偷取到的最大的金额是多少?
- 不偷第N-1个房子时,能偷取到的最大的金额是多少?
- 偷第N-1个房子时,能偷取到的最大的金额是多少