算法-动态规划-打家劫舍

1 题目概述

1.1 题目出处

https://leetcode-cn.com/problems/house-robber/

1.2 题目描述

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 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 。

2 动态规划

2.1 思路

思考,每一个房屋是否行窃如何决定?

第i个房屋最大价值 = Math.max(选当前+前i-2个房屋的价值和, 不选当前,前i-1个房屋的价值和)

那么这就是典型的动态规划问题。

2.2 代码

class Solution {public int rob(int[] nums) {int result = 0;if(nums == null || nums.length == 0){return result;}if(nums.length == 1){return nums[0];}int dp[] = new int[nums.length];// 第i个房屋最大价值 = Math.max(选当前+前i-2个房屋的价值和,不选当前,前i-1个房屋的价值和)dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);    for(int i = 2; i < nums.length; i++){dp[i] = Math.max(nums[i] + dp[i-2], dp[i-1]);}return dp[nums.length - 1];}
}

2.3 时间复杂度


O(N)

2.4 空间复杂度

O(N)

算法-动态规划-打家劫舍相关推荐

  1. 算法-动态规划算法总结

    1 基础问题 // 509. 斐波那契数 // 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.// dp[i]的 ...

  2. 计算机算法的发展动态,计算机算法动态规划讲解.ppt

    计算机算法动态规划讲解 * 0-1背包问题 设所给0-1背包问题的子问题 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,-,n时0-1背包问题的最优值.由0-1背包问题 ...

  3. 漫画说算法--动态规划算法三(绝对通俗易懂,非常棒)

    在前两集漫画中,我们通过一个算法问题的完整解题过程,讲述了动态规划的基本概念和思想.没看过前两集的朋友可以点击下面的链接: 漫画说算法–动态规划算法一(绝对通俗易懂,非常棒) 漫画说算法–动态规划算法 ...

  4. 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...

  5. 算法-动态规划2图问题-TSP问题

    算法-动态规划2-TSP问题 问题: 旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 设s, s1, s2, -, sp, s是从s出发的一条路径长度最短的 ...

  6. 算法-动态规划2图问题-多段图的最短路径问题

    算法-动态规划2-多段图的最短路径问题 多段图的最短路径问题 问题:设图G=(V,E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi(2<=k<=n,1<=i< ...

  7. 算法 动态规划 01背包问题

    01背包 问题分析 代码实现 从前往后拿,递归实现 非递归实现 非递归实现,自上向下填充 允接上一文章内容: 算法 动态规划: link. 问题分析 按照普通思维,首先想到应该为贪心算法,也就是计算每 ...

  8. 贪心算法+回溯算法+动态规划

    一.贪心算法 1.分饼干问题 #思路:排序加贪心 先让胃口小的孩子满足 class Solution:def findContentChildren(self, g, s):print('==g:', ...

  9. 相关算法---动态规划

    动态规划 1. 理论基础 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的.所以动态规划中每一个状态一定是由上一个状态推导出来的, ...

  10. Dijkstra 贪心算法 动态规划

    我认为 Dijkstra算法 的本质是 广度优先搜索, 而此处的广度是定义在路程的cost之上的. (就好比从圆心处向外扩散一个圆环,首次碰到的就是最近) 动态规划泛指,重叠子问题与原问题的推算关系( ...

最新文章

  1. Python分析离散心率信号(中)
  2. 关于人工智能中强化学习的扫盲
  3. ASP.NET AJAX示例程序:实现IDragSource和IDropTarget接口将商品拖放至购物车中
  4. textview 背景变形_西安昆明池桁架舞台背景搭建欢迎致电
  5. ubuntu下执行ulimit返回“不允许的操作”,问题解决思路
  6. 内核管理实战之虚地址转换为物理地址
  7. UA SIE545 优化理论基础4 对偶理论简介1 松弛问题与Lagrange对偶
  8. 【ES6专栏】全面解析ECMAScript 6模块系统
  9. 2019中山大学程序设计竞赛
  10. 自用开源/免费软件收集
  11. pt-archiver 数据归档bug
  12. 我不够格,但我还是希望事情到此为止,继续工作罢
  13. 第005讲 表单及表单控件,隐藏域
  14. Burp Suite —— 验证码识别、切换IP
  15. 做一名有幸福感的计算机教师,做一名有幸福感的教师其实很简单
  16. 离线语音茶吧机设计应用案例
  17. pyqt5 python qlineedit信号_PyQt5实现QLineEdit添加clicked信号的方法
  18. 计算机硬盘能影响速度吗,BitLocker对电脑硬盘性能的影响
  19. 苹果个人开发者账号升级为公司开发者教程
  20. 微信html页面缓存问题,浅谈微信页面入口文件被缓存解决方案_简单_前端开发者...

热门文章

  1. Awesome Blockchain 区块链技术导航
  2. 迎奥运,20个帮助你塑造体形的网站
  3. easyui datagrid 多一列
  4. 安装Dreamweaver CS5遇到的问题
  5. C语言程序设计---跟随Frank-FuckPPT
  6. 学习Camera2自定义相机从入门到高级一篇就够了
  7. Oracle隐含参数查看
  8. c++ primer第16章课后习题答案
  9. 苹果用计算机知道密码,苹果icloud密码忘了?最全攻略奉上
  10. FFmpeg从视频中提取音频