打家劫舍题型:

I.

分析:

​ 当前第i个房屋的状态分为打劫或者不打劫,打劫与不打劫的状态从上一个房屋第i-1个状态转移而来。

1) 打劫上一个房屋 当前房屋则是 上一个房屋打劫的最大值 == 第i-1个房屋的最大值

2) 不打劫上一个房屋 当前房屋则是 上一个房屋的不打劫的最大值+当前房屋的值 == 第i-2个房屋的最大值+nums[i]

由此状态转移方程可以推出:
f[i]=max(f[i−1],f[i−2]+nums[i])f[i] = max(f[i-1],f[i-2]+nums[i]) f[i]=max(f[i−1],f[i−2]+nums[i])

class Solution {public int rob(int[] nums) {if(nums==null||nums.length==0)return 0;if(nums.length==1)  return nums[0];int n = nums.length;int[] f = new int[nums.length+1];f[1] = nums[0];for(int i = 2 ; i <= nums.length ; i++ ){f[i] = Math.max(f[i-1],f[i-2]+nums[i-1]);  // 状态转移方程}return f[nums.length];}
}

II.

分析:思路沿用上一问的思路。

但这个题的难点在于首个房屋和尾个房屋连在一起。当算第一个房屋就不能算最后一个房屋,当算了最后一个房屋就不能算第一个房屋。所以,我们可以将围成圈的房屋 将第一个房屋与最后一个房屋拆开 也就是说 分为两个数组进行dp。

如:arr[] = 1 2 3 6 7 8 2 3

将他拆分为 : arr1 [] = 1 2 3 6 7 8 2

​ arr2 [] = 2 3 5 7 8 2 3

对他们两个分别进行dp,再比较末尾的最大值即可

状态转移方程:
f[i]=max(f[i−1],f[i−2]+nums[i])f[i] = max(f[i-1],f[i-2]+nums[i]) f[i]=max(f[i−1],f[i−2]+nums[i])

class Solution {public int rob(int[] nums) {if(nums==null||nums.length==0)return 0;if(nums.length==1)  return nums[0];int n = nums.length;int[] f = new int[nums.length]; f[1] = nums[0];//  将末尾的房屋拆开for(int i = 2 ; i < nums.length ; i++ ){f[i] = Math.max(f[i-1],f[i-2]+nums[i-1]);}int[] h = new int[n];h[1] = nums[1]; //  将第一个房屋拆开for(int i = 2 ; i < n ; ++i){  h[i] = Math.max(h[i-1],h[i-2]+nums[i]);}return Math.max(f[nums.length-1],h[n-1]); }
}

LeetCode 打家劫舍题型 解析相关推荐

  1. LeetCode 打家劫舍问题

    LeetCode 打家劫舍问题 一:House Robber1 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间 ...

  2. jqery获取每个月天数_三年级《年、月、日》单元重要知识点整理汇总,以及难点题型解析...

    昨天给大家分享了<计算经过的时间>问题,今天给大家分享的是<年.月.日>单元中重要的几个知识点,以及难点题型解析. 知识点1 感知年.月.日 一.结合生活实际,看看下面事情需要 ...

  3. 2019年6月英语四级考试计划和题型解析

    今天是2019年3月26日,距离6月15日的CET4还有80天.如果你不去安排好自己的时间,时间就会悄悄从你指尖流走,从一开学英语老师就已经为我们的第一次四级考试做好计划了,而我,惯有的拖延症,一直拖 ...

  4. 计算机网络知识副标题,计算机统考常见题解答及经典题型解析.doc

    计算机统考常见题解答及经典题型解析 计算机统考常见问题解答 1.哪些学生需要参加统考? 答:教育部批准的试点高校和中央电大"人才培养模式改革和开放教育试点"项目中自2004年3月1 ...

  5. Leetcode各种题型题目+思路+代码(共176道题)

    文章目录 第一章:Leetcode 每日很多题 1.Leetcode-1047 删除字符串中的所有相邻重复项 2.剑指 Offer 53 - I. 在排序数组中查找数字 I 3.Leetcode704 ...

  6. LeetCode常见题型——树

    1. 算法思想 作为(单)链表的升级版,我们通常接触的树都是二叉树(binary tree),即每个节点最多有 两个子节点:且除非题目说明,默认树中不存在循环结构. struct TreeNode { ...

  7. LeetCode常见题型——二分查找

    1. 算法思想 二分查找(又叫二分法,折半查找)每次在查找时通过将待查区间分为两部分并只取一部分继续查找.对于一个长度为O(n)的数组,二分查找的时间复杂度为O(log(n)). C++等语言习惯使用 ...

  8. 关于面试题的一些题型解析

    从this开始吧 首先是指向对象例题  找this 还有的就是对this的一些分析 function chifan(){ console.log(this) }在这个里面我们可以清楚的知道   班长就 ...

  9. 使用循环链表实现一个通讯录的管理程序_【LeetCode链表题型总结】

    点击上方蓝字,关注公众号 链表概念的讲解 链表是什么 链表是一种线性数据结构,每个节点都存有数据,通过指针将各个节点链接在一起. 链表的性质 一致性: 每个节点有相同的数据结构,相同的数据大小,内存中 ...

  10. dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割

    记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...

最新文章

  1. python究竟要不要使用多线程
  2. Gridview][UpdateCommand的写法要点]
  3. 修改数据库中group_concat的返回结果的长度限制
  4. android adb命令,向开发手机添加文件
  5. Vuex——命名空间导致错误[unknown action type:XXX]解决方案
  6. 使用 ExecuteMultiple 提高批量数据加载的性能
  7. CPU 被挖矿,Redis 竟是内鬼!
  8. [\u4e00-\u9fa5] //匹配中文字符
  9. 基本操作1-本地仓库连接远程仓库
  10. 服务器中修改项目端口,c#-在Visual Studio 2013中更改项目端口号
  11. jQery 操作CSS
  12. GTK、Qt和wxWidgets
  13. 管理系统项目-简历描述篇
  14. echarts结合amap (echarts-extension-amap)
  15. 爱奇艺体育获5亿元战略融资 ,IDG资本、汇盈博润领投
  16. IT运维大咖带你玩转企业信息运维自动化
  17. 【视觉定位UV】CCD相机安装标准
  18. sim卡没坏但苹果手机无服务_工信部为啥要喊你设置SIM卡密码?如何设置(安卓苹果都有了)|工信部|手机|安卓|安卓手机|iphone...
  19. 如何做好用户故事地图?
  20. mysql 多表查询练习题(一)数据准备

热门文章

  1. 智能车学习----最小二乘法求拟合曲线(中线)的斜率
  2. 密歇根州立大学被黑 个人信息和社保号码被盗
  3. OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常...
  4. 发光二极管工作电流分析
  5. js 获得较浅的颜色_了解较少的颜色功能
  6. 协议解析-串口协议解析
  7. Latex 制作表格
  8. 123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
  9. python的自省与反射机制
  10. autoCAD 向图形中添加文字