zoukankan      html  css  js  c++  java
  • leetcode-HouseRobber

    这道题比较简单,所以我会介绍的比较粗略:

    题目:

      有一个小偷想沿着马路上的房子偷东西,每家每户都有一些钱,但这条街上装了监控系统,如果相邻的两户人家都被偷了的话那么就会触发报警器。小偷的目标就是在不触发报警器的前提下,如何才能偷到最多的钱?

    解答:

      这道题目给的提示是使用dynamic programming来解决,也就是动态规划。动态规划的概念最重要的一点就是把问题一层层拆成规模更小的子问题。那么我们可以得出一套公式,给定nums为一维数组,数组元素代表每家所有的钱:

    F(1) = nums[0]

    F(2) = max(nums[0], nums[1])

    F(3) = max(F(2), F(1) + nums[2])

    ...

    F(n) = max(F(n-2) + nums[n-1], F(n-1))

    PS.可能在第三步这里我们不能够准确的归纳出正确的公式,需要我们细心观察

      下面献上python代码:

    class Solution(object):
        def rob(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            last, now = 0, 0
            for i in nums:
                last, now = now, max(last+i, now)
            return now
    
  • 相关阅读:
    一个maven问题
    zz 聊聊并发(七)——Java中的阻塞队列
    聊聊并发(六)
    jvm 内存参数
    zz 聊聊并发(五)
    zz 聊聊并发(四)
    zz 聊聊并发(三)
    zz 聊聊并发(二)
    zz 聊聊并发(一)
    JQuery中$.ajax()方法参数详解
  • 原文地址:https://www.cnblogs.com/Blaxon/p/4863617.html
Copyright © 2011-2022 走看看