leetcode之House Robber

本文探讨了一道动态规划问题,介绍了从初始的递归方法到利用二分思想优化算法过程的具体实现。通过递归思路虽然直观但容易超时,最终采用在中间位置拆分数组的方法,有效地减少了计算量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题的分类是动态规划。目前还不是很懂这种算法。做起来非常吃力(基本寸步难行)。这题一开始可以看到一个简单的想法是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值