栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

213. 打家劫舍 II

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

213. 打家劫舍 II

总结:
	简简单单动态规划,和字符串一样,看以当前元素结尾所能取到的最大值
	没什么好说的,注意是一个圈所以第一个元素和最后一个元素不共存,所以可以
	分为两种情况,有一无后,有后无一
'''
    注意:
        房屋被围成了一圈,所以第一个和最后一个一定不会同时出现
        假设出现第一个不出现最后一个
            dp[i]=nums[i-1]+dp[i-1] i=1,2,3,4...
            dp[i]表示长度为i  nums[i-1]表示下标为i-1
            dp[0]=0

        对于
'''

def fun1(nums):
    if len(nums)<=3: #只能偷一个
        return max(nums)
    dp=[0]*(len(nums)+1)
    max_1=0
    dp[1]=nums[0]
    dp[2]=nums[1]
    for i in range(3,len(nums)):#从1到len(s)-2
        dp[i]=nums[i-1]+max(dp[0:i-1:])#找到可取范围内的最大值
        if max_1 
def fun2(nums):
    '''
        上面代码是可以化简的,我每次使用的都是与i相隔一格的集合最大值
        所以可以拿变量记录最大值,这样的话可以省去每次查找花费的时间

    :param nums:
    :return:
    '''
    if len(nums)<=3: #只能偷一个
        return max(nums)
    dp=[0]*(len(nums)+1)
    max_1=0
    dp[1]=nums[0]
    dp[2]=nums[1]
    pre1=dp[1]
    for i in range(3,len(nums)):#从1到len(s)-2
        dp[i]=nums[i-1]+pre1#找到可取范围内的最大值
        if max_1 
def fun3(nums):
    '''
        fun1是一个时间复杂度为o(n**2) 空间复杂度为o(n)的算法
        fun2优化了时间复杂度变为o(n),采用变量记录,少了重复操作,空间复杂度没变
        现在在fun2的基础上优化空间复杂度
    :param nums:
    :return:
    '''
    if len(nums)<=3: #只能偷一个
        return max(nums)
    max_1=max(nums[0],nums[1])
    pre1=nums[0]
    pre2=nums[1]
    for i in range(3,len(nums)):#从1到len(s)-2
        cur=nums[i-1]+pre1
        if max_1
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号