题目

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。偷窃到的最高金额 = 2 + 9 + 1 = 12 。提示:0 <= nums.length <= 100
0 <= nums[i] <= 400

解题思路







解决方法

解决方法1:

class Solution {static int num = 0;static HashMap<Integer,Integer> map = new HashMap<>();    public int rob(int[] nums) {if (nums.length == 0) {return 0;}// 子问题:// f(k) = 偷 [0..k) 房间中的最大金额// f(0) = 0// f(1) = nums[0]// f(k) = max{ rob(k-1), nums[k-1] + rob(k-2) }int N = nums.length;int[] dp = new int[N+1];dp[0] = 0;dp[1] = nums[0];for (int k = 2; k <= N; k++) {dp[k] = Math.max(dp[k-1], nums[k-1] + dp[k-2]);}return dp[N];}
}

解决方法2:

class Solution {int num = 0;HashMap<Integer,Integer> map = new HashMap<>();    public int rob(int[] nums) {int i = reb3(nums, nums.length);System.out.println(num);return i;}public int reb3(int[] nums,int length){num ++;if (length == 0) {return 0;}else if (length == 1){return nums[0];}else if (length == 2){return Math.max(nums[0],nums[1]);}Integer orDefault = map.getOrDefault(length, -1);if (orDefault != -1) {return orDefault;}int max = Math.max(reb3(nums, length - 1), reb3(nums, length - 2) + nums[length - 1]);map.put(length,max);return max;}
}

算法--------打家劫舍(动态规划,Java版本)相关推荐

  1. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  2. JAVA算法:走迷宫回溯算法设计(JAVA版本)

    JAVA算法:走迷宫回溯算法设计(JAVA版本) 迷宫数组 int[][] maze = {                 {0, 1, 0, 0, 0},                 {0, ...

  3. 算法------零钱兑换(Java版本)

    题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.示例 1:输入: coins ...

  4. 网易实习面经中的算法题(java版本含注释)

    目录 前言 7. 整数反转(中等) 9. 回文数(简单) 14. 最长公共前缀(简单) 20. 有效的括号(简单) 23. 合并K个升序链表(困难) 64. 最小路径和(中等) 103. 二叉树的锯齿 ...

  5. 算法----------快乐数 (Java版本)

    编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1.如 ...

  6. CSDN蓝桥杯算法题——题解Java版本——切面条

    目录 题目:切面条 答案目标: 推导过程: 解析过程: 对照Java编码1: 对照Java编码2: 总结: 题目:切面条 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以 ...

  7. 算法------------完全平方数(Java版本)

    题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少.示例 1:输入: n = 12 输出: 3 解释: 12 ...

  8. 微博短链接的生成算法(Java版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...

  9. java短链接原理_微博短链接的生成算法(Java版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...

  10. 微博短链接的生成算法(Java 版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就 ...

最新文章

  1. 利用SAP FR高效预测客户需求
  2. Apache中的一个测试小工具
  3. 如何构建 SaaS 网站的高转化?
  4. 【转】用matlab画极坐标图,希望不同的半径点对应不同颜色,应该怎么做?有什么函数
  5. 怎么调整计算机显示屏,电脑显示器怎样调大屏幕
  6. DirectX11 With Windows SDK--07 添加光照与常用几何模型、光栅化状态
  7. 最短路径之迪杰斯特拉算法
  8. 新来的妹子把几百万数据放入了内存,系统立马爆了,我不得已做到了妹子傍边,手把手教妹子...
  9. (转)Tomcat目录结构
  10. 7-4 mmh学长与出栈 (20分)
  11. AifbdScore智能AI曲谱乐谱播放识别SDK midi曲谱 应用开发 五线谱 六线谱 四线谱播放
  12. [LTE] LTE基本架构
  13. LayaBox引擎源码阅读笔记(四、文本渲染原理相关)
  14. 中文的括号和英文的括号区别_如何在word里快捷键入六角括号
  15. Pycharm---修改背景颜色和背景图片
  16. nacos 安装包下载 linux+windows
  17. 【固态硬盘】入门讲解
  18. 解决 java double 减 int 型 产生的精度问题
  19. 嵌入式开发(三):海思Hi3559a交叉编译live555
  20. springcloud奥义 微服务

热门文章

  1. 如何将风险应用加入白名单_将微信服务器、API接口的IP列表加入宝塔防火墙IP白名单...
  2. 普通高中计算机课程软件,普通高中信息技术课程标准(2017 年版)(4):选修课程...
  3. php数据更新实例,php mysq数据编辑更新实例_PHP教程
  4. 通信专业考研考C语言,2016年北京邮电大学信息与通信工程学院C语言程序设计考研复试题库...
  5. Oracle11G_逻辑备份
  6. (轉貼) 美電腦工程師改寫遊戲軟體向女友求婚成功 (News)
  7. 追寻终极数据库 - 事务/分析混合处理系统的交付挑战 (1)
  8. 简单又实用的pandas技巧:如何将内存占用降低90%
  9. Windows下Nginx+Tomcat整合的安装与配置
  10. DumpMem and Monster - Virtual Memory Explorers on Windows Mobile/CE