198. House Robber
Posted liaohuiqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了198. House Robber相关的知识,希望对你有一定的参考价值。
问题
非负数组表示每个房子拥有的金钱,抢了一个房子后不能抢隔壁房子的,求能抢到的最大数额。
Input: [1,2,3,1]
Output: 4
Explanation: 1 + 3 = 4.
思路
用dp[i]表示以index i结尾的子数组里,能抢的金钱最大和(不一定要抢nums[i])。可以得到dp公式为:(dp[i] = max(dp[i-1], dp[i-2] + nums[i]))。
因为dp只取决于前两个数,可以用两个变量f1和f2优化,省去dp的数组空间开销。
- 时间复杂度O(n),空间复杂度O(1)
代码
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if(len(nums) == 0):
return 0
elif(len(nums) == 1):
return nums[0]
f2 = nums[0]
f1 = max(nums[0], nums[1])
for i in range(2,len(nums)):
f1, f2 = max(f2+nums[i], f1), f1
return f1
以上是关于198. House Robber的主要内容,如果未能解决你的问题,请参考以下文章