`
Cwind
  • 浏览: 262819 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
793bb7df-a2a9-312d-8cb8-b66c3af482d1
LeetCode题解
浏览量:52431
社区版块
存档分类
最新评论

LeetCode[动态规划] - #198 House Robber

阅读更多

原题链接:#198 House Robber

 

要求:

原题是要为某盗贼设计一个能使其利益最大化的方案(这个场景并不和谐,在保持题意的情况下重新描述一个场景)。假设某糖果工厂有若干糖果机,每台糖果机每天产出不同数量的糖果,每天取糖果时不能同时取相邻两台糖果机的糖果(别问为什么),问每天能取得的最大糖果数量是多少。

 

糖果机产生的糖果数量集合可以看成一个整型数组。

 

难度:简单

 

分析:

考虑使用动态规划来解决此问题。当糖果机只有1台时,取走这台产出的所有糖果;当糖果机有两台时,取走产出较多的糖果。当糖果机有三台时,有两种取法,取走第二台的产出的糖果,或取出第一台与第三台的所有糖果。假设第n台糖果机产出的糖果数量为S(n), 取到第n台为止时取到的最大糖果总数量为M(n),则有:

M(1) = S(1)

M(2) = Max(S(1), S(2))

M(3) = Max(M(1)+S(3), M(2))

...

M(n) = Max(M(n-2)+S(n), M(n-1))

即是说,当取到第n台时,有两种方案,要么n-1台不取,此时糖果数量为前n-2台所取数量加上第n台的产出数量;要么第n台本身不取,保留前n-1台所取的总数量。在这两种方案中选取所取总数量较大者即可。

 

解决方案:

Java - 296 ms

public int rob(int[] nums) {
        if(nums==null||nums.length==0){
            return 0;
        }
        int[] maxMoney = new int[nums.length+1];
        maxMoney[nums.length] = 0;
        maxMoney[nums.length-1] = nums[nums.length-1];
        for(int i=nums.length-2; i>=0; i--){
            maxMoney[i]=(nums[i]+maxMoney[i+2]>maxMoney[i+1])?(nums[i]+maxMoney[i+2]):maxMoney[i+1];
        }
        return maxMoney[0];
    }

 简单测试程序

    

 

2
3
分享到:
评论

相关推荐

    最大公共字符串leetcode-HouseRobber-Problem-LeetCode-:HouseRobber-问题-LeetCode-

    HouseRobber-问题-LeetCode- @Faizansayeed28 代码 /** * 问题陈述- 你是一名职业劫匪,计划抢劫街道上的房屋。 每个房子都有一定数量的钱 藏起来,阻止你抢劫他们的唯一限制是相邻的房子有安全系统 连接,如果同一...

    leetcode和oj-OJ_Solution:leetcode、poj等OJ解决方案

    leetcode 和 oj OJ_Solution Solutions for OJ such as leetcode, poj and so on 版本 ...https://leetcode.com/problems/two-sum/ ...java/houserobber https://leetcode.com/problems/house-robber/

    LeetCode:Leetcode-解决方案

    House Robber [198]6. Range Sum Query - Immutable [303]7. Counting Bits [338]8. Palindromic Substrings [647]9. Maximum Length of Pair Chain [646]10. Integer Break [343]11. Count Numbers with Unique ...

    leetcode最大蓄水量-leetcode:记录自己leetocde的过程

    学会了数组的创建,以及动态规划最基本的题目 2021.2.2 322 兑换钱币 学会了 Arrays.fill 的使用,以及查看源码,返回 记录在哔哩哔哩 中 2021.2.3 53 最大子数字之和 先更新max,再将负数赋值为0 62 不同的路径 arr...

    lrucacheleetcode-LeetCode:复制和思考

    lru cache leetcode LeetCode copy and think 加油学习 1. 时间轴 时间 题目 描述 知识点 ...198. House Robber 动态规划 如何确定子问题 20200525 20200525 20200525 20200525 20200525 20200525 $1 234

    LeetCode判断字符串是否循环-data-structure-and-algo:C++中的数据结构和算法

    HouseRobber(#198), ClimbingStairs(#70), CoinChange(#322), EditDistance(#72) 图 : 集合的合并(直接求并、按大小求并和按深度求并)、根搜寻(路径压缩) : 有向图和无向图的邻接表表示方法 : 图的深度优先和广度...

    lrucacheleetcode-LeetCode:CppSourceCode的LeetCode解决方案

    算法-动态规划 题号 名称 English Name 题解 53 最大子序和 Maximum Subarray 70 爬楼梯 Climbing Stairs 121 买卖股票的最佳时机 Best Time to Buy and Sell Stock 122 买卖股票的最佳时机 Ⅱ Best Time to Buy and...

    gasstationleetcode-leetcode:LeetcodeOJ解决方案

    198.House Robber, 55.Jump Game 72.Edit Distance, 97.Interleaving String, 115.Distinct Subsequences 2017/04/24 (Lintcode)92.Backpack, (Lintcode)125.Backpack II, (Lintcode)564.Backpack VI 不适用 53....

    prac:编码实践

    编码实践 编码实践 模式:二进制搜索: 二进制搜索 二进制搜索: : 排序数组的上限: : ... 众议院强盗2: ://leetcode.com/problems/house-robber-ii/discuss/59921/9-lines-0ms-O(1)-Space-C++-sol

    cpp-算法精粹

    动态规划 Triangle Maximum Subarray Maximum Product Subarray Longest Increasing Subsequence Palindrome Partitioning II Maximal Rectangle Best Time to Buy and Sell Stock III Best Time to Buy and Sell ...

Global site tag (gtag.js) - Google Analytics