打劫房屋

作者: 只为此心无垠 | 来源:发表于2018-03-18 11:48 被阅读6次

LeetCode题目思路
时间复杂度O(n),空间复杂度O(n)

def houseRobber(self, A):
        # write your code here
        # 状态方程f(n) = max(f(n-1),f(n-2)+f(n))
        # f(n)走到当前位置,偷到的最多钱(最优状况)
        # 和走楼梯问题相关,和斐波那契数列类似

        if len(A) == 0:
            return 0
        
        f = [0] * len(A)
        
        #初始条件
        f[0] = A[0]
        if len(A) > 1:
            f[1] = A[1]
        
        #状态方程
        for index in range(2,len(A)):
            f[index] = max(f[index-1],f[index-2]+A[index])
            
        return f[len(A)-1]

时间复杂度O(n),空间复杂度O(0),借原有数组存储,缺点改变了A数组

def houseRobber(self, A):
        if len(A) == 0:
            return 0
        
        for index in range(2,len(A)):
            A[index] = max(A[index-1],A[index-2]+A[index])
            
        return A[len(A)-1]

借用求斐波那契数列可知,其实这题只需要保存f(n)之前的两个数f(n-1)和数f(n-2)即可
时间复杂度O(n),空间复杂度O(1)

def houseRobber(self, A):
        f, g, f1, g1 = 0, 0, 0, 0
        for x in A:
            f1 = g + x
            g1 = max(f, g)
            g, f = g1, f1
       
        return max(f, g)

相关文章

  • 打劫房屋

    LeetCode题目思路时间复杂度O(n),空间复杂度O(n) 时间复杂度O(n),空间复杂度O(0),借原有数组...

  • LintCode 打劫房屋

    假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装...

  • 算法6 抢劫

    题目:你是一名专业强盗,计划沿着一条街打劫。每间房屋都储存有一定金额的钱,唯一能阻止你打劫的约束条件就是房屋之间有...

  • [leetcode/lintcode 题解] 打劫房屋 · H

    【题目描述】 假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是...

  • 打劫

    霓虹渐染了街道, 我是入侵的黑白素描, 捏着昨天落下的小抄, 打劫狂浪的喧嚣, 她一闹, 他一笑, 我却求了饶, ...

  • 打劫

    我大一快寒假的时候,因为在外面兼职,回来地很晚,然后抄近路,被两个貌似初中*男生持刀抢劫,不是小匕首或者菜刀,是电...

  • 打劫

    刘三和杨八在逛街回来的路上碰见打劫。看见刀的一刹那,刘三脑中闪过儿时当警察、少时当兵,以及中年看战争片觉得如果生对...

  • 打劫

    有一条乡村的小路,两旁房屋有些破败,但是感觉里面是有人在住。我只能说,马路上确实没什么人。 路边有这样一群人,一个...

  • 打劫

    平子 月色很凉,风很冷,这是一场雨后孤寂的寒夜,路旁的树正在黑暗中努力的摇摆,不甘心的伸出抗争的枝桠。 他在树下,...

  • 打劫

    某银行服务网点,五个业务窗口居然只有一个在工作,其余四个窗口都被放上了“暂停服务”的告示牌。 仅剩的一个窗口前,办...

网友评论

    本文标题:打劫房屋

    本文链接:https://www.haomeiwen.com/subject/dhreqftx.html