本文是在学习中的总结。欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47680663

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.

思路:

(1)这道题非常有意思。在这里就不翻译成中文了。将题目内容转化为通俗易懂的形式为:给定一个整数数组Arr,求解数组中连续的不相邻元素的和的最大值。比如:对于数组中的元素A1,A2,A3,A4。则须要推断A1+A3,A1+A4,A2+A4中的最大值即为所求。

(2)该题是一道简单动态规划相关的题目。假设可以正确地找到当中的递推关系。那么该题就非常easy了。对于n个数的数组,假设要求得其连续不相邻元素的最大值,那么我们仅仅需求得n-1个数的最大值,以及求得n-2个数的最大值就可以,这样就形成了求解该问题的子问题的最大值问题,所以非常easy考虑出递推关系,假设数组为Arr[],n个数的数组相应的不相邻连续元素的最大值用函数f(n)表示,则有f(n) = max{f(n-1), f(n-2)+A[n-1]},当中n>=2,f(n)也称为递推关系。

当中f(n-1)为n-1个元素的最大值。f(n-2)+Arr[n-1]为n-2个元素的最大值加上数组第n个元素的值,由于要求元素不能相邻。所以会跳过第n-1个元素。这个应该非常好理解。

对动态规划感兴趣的同学可以看看网上有关动态规划的文章。个人认为非常有必要学习动态规划的思想。

(3)详情见下方代码。希望本文对你有所帮助。

算法代码实现例如以下:

package leetcode;/*** * @author liqq**/
public class House_Robber {public static int rob(int[] nums) {if (nums == null || nums.length == 0)return 0;int len = nums.length;int[] rt = new int[len];if (len == 1)return nums[0];if (len == 2) {return nums[0] > nums[1] ? nums[0] : nums[1];}for (int i = 0; i < len; i++) {if (i == 0) {rt[i] = nums[i];} else if (i == 1) {rt[i] = Math.max(rt[i - 1], nums[i]);} else {rt[i] = Math.max(rt[i - 1], rt[i - 2] + nums[i]);}}return rt[len - 1] > rt[len - 2] ? rt[len - 1] : rt[len - 2];}
}

Leetcode_198_House Robber相关推荐

  1. 213. House Robber II

    一.题目 1.审题 2.分析 一个连续的数组,你能获取不连续的元素值代表的财富,数组首尾的两个元素算作连续,求能获得的最大财富值. 二.解答 1.思路: 在 198. House Robber 的基础 ...

  2. Leetcode题目:House Robber II

    题目: Note: This is an extension of House Robber. After robbing those houses on that street, the thief ...

  3. 【LeetCode从零单排】No198.House Robber No91.Decode Ways139 word break(动态规划典型应用)

    1.题目 一道典型的Dynamic Programming的题目. You are a professional robber planning to rob houses along a stree ...

  4. LeetCode 213 House Robber II Python

    题意:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的 ...

  5. leetcode 337. House Robber III | 337. 打家劫舍 III(树形dp;什么情况下dp需要强制包含当前元素?)

    题目 https://leetcode.com/problems/house-robber-iii/ 思考:什么情况下 dp 需要强制包含当前元素? dp 过程中,需要包含当前元素 的例子: leet ...

  6. 213. House Robber II 首尾相同的偷窃问题

    [抄题]: You are a professional robber planning to rob houses along a street. Each house has a certain ...

  7. [dp]leetcode 198. House Robber

    输入:一个数组nums,每一个元素nums[i]表示第i个房间的价值. 输出:一个抢劫犯能抢到又不会被警察发现的最大价值. 规则:如果抢劫犯抢了相邻房间,那么报警装置就会触发,警察会得到通知. 分析: ...

  8. LeetCode 198, 213 House Robber

    198 House Robber DP 0~n-1     ans=dp[n-1] dp[i] = max(dp[i-2]+nums[i], dp[i-1])  i>=2 如果要输出偷了那些房子 ...

  9. leetcode python3 简单题198. House Robber

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百九十八题 (1)题目 英文: You are a professional r ...

最新文章

  1. 品友互动入榜“AI First——2017-2018年中国人工智能先行企业榜TOP10”
  2. 多线程:happens-before原则
  3. 私有云和公有云的区别_如何理解公有云和私有云
  4. 高性能、低成本的高防 IP 产品能现实吗?
  5. ndnsim r语言 ubuntu_Ubuntu14.04安装配置ndnSIM
  6. mysql left join第一个_MySQL 之 LEFT JOIN 避坑指南
  7. cr全称是什么意思_轻生未遂?她到底经历了些什么......
  8. 开发范式大转移,云原生开发者如何把握技术脉络?
  9. Foobar2000的配置及优化
  10. 什么是操作系统啊 | 战术后仰
  11. 元器件-二极管、三极管
  12. EMC VMAX控制台更换指南
  13. 码栈开发手册(四)---编码方式开发(其他功能函数)
  14. 香蕉树上第四根芭蕉——c++中容器的概念说明---转载记录
  15. MyBatis的优点和缺点
  16. Python 训练 Day 15
  17. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)
  18. 2020年11月-北京-今日头条面试题
  19. 高刷显示器变成24Hz的原因及解决方法
  20. 代理商分销订货系统(电脑、H5、小程序、APP)多端全套源码

热门文章

  1. 当UG的License服务器换了后, 客户端如何调整?
  2. doget dopost 过滤器 乱码
  3. 服务器开发的一些框架或者工具收集
  4. wamp 安装monggo扩展
  5. GO语言struct语法
  6. 透露|Java学习的最后一点小秘密
  7. C言语for轮回语句
  8. crontab脚本,定时任务相关细节
  9. 【神奇的函数式编程语言的独特功能】Lisp 的运行期修改、编译代码,并替换当前运行版本的试验...
  10. OPK修改操作系统信息 --oobe.xml