这题的分类是动态规划。目前还不是很懂这种算法。做起来非常吃力(基本寸步难行)。这题一开始可以看到一个简单的想法是1 + 3以后的和2 + 4以后的取最大值的递归。然而超时了。。。再接着想方法。最后是利用2分的性质,在中间取一个数进行拆分来简化时间。代码如下:
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
if len(nums) == 2:
return max(nums[0], nums[1])
else:
middle = len(nums) / 2
a = self.rob(nums[:middle]) + self.rob(nums[middle + 1:])
b = self.rob(nums[:middle - 1]) + self.rob(nums[middle:])
if a >= b:
return a
else:
return b
本文探讨了一道动态规划问题,介绍了从初始的递归方法到利用二分思想优化算法过程的具体实现。通过递归思路虽然直观但容易超时,最终采用在中间位置拆分数组的方法,有效地减少了计算量。
115

被折叠的 条评论
为什么被折叠?



