[刷题] 198 House Robber
要求
- 你是一个小偷,每个房子中有价值不同的宝物,但若偷连续的两栋房子,就会触发报警系统,求最多可偷价值多少的宝物
示例
- [3,4,1,2],返回6[3,(4),1,(2)]
- [4,3,1,2],返回6[(4),3,1,(2)]
实现
- 暴力解法:检查所有房子的组合,对每个组合检查是否有相邻房子,若没有则记录其价值,找最大值((2^n)*n)
- 递归

- 记忆化搜索

1 class Solution {
2 private:
3 // memo[i] 表示抢劫nums[i...n)所能获得的最大收益
4 vector<int> memo;
5 // 考虑抢劫 nums[index...nums.size())范围内房子
6 int tryRob(vector<int> &nums, int index){
7
8 if(index >= nums.size())
9 return 0;
10
11 if( memo[index] != -1 )
12 return memo[index];
13
14 int res = 0 ;
15 for( int i = index ; i < nums.size() ; i ++ )
16 res = max( res, nums[i] + tryRob(nums, i + 2) );
17 memo[index] = res;
18 return res;
19 }
20 public:
21 int rob(vector<int>& nums) {
22 memo = vector<int>(nums.size(),-1);
23 return tryRob(nums, 0);
24 }
25 };
- 动态规划
- 状态转移(n^2)
- v(n):偷取标号n的房子
- 状态 f(n):偷取[x...n-1]范围内的房子(做什么)
- 状态转移:f(0) = max { v(0) + f(2) , v(1) + f(3) , v(2) + f(4) , ... , v(n-3) + f(n-1) , v(n-2) , v(n-1) }(怎么做)
- 7-8:判断传入是否为空数组,否则12会越界
- 16:判断 j+2 是否越界

1 class Solution {
2
3 public:
4 int rob(vector<int>& nums) {
5
6 int n = nums.size();
7 if( n == 0 )
8 return 0;
9
10 // memo[i] 表示抢劫nums[i...n-1]所能获得的最大收益
11 vector<int> memo(n,-1);
12 memo[n-1] = nums[n-1];
13 for( int i = n-2 ; i >= 0 ; i -- )
14 // memo[i]
15 for( int j = i ; j < n ; j ++ )
16 memo[i] = max( memo[i], nums[j] + (j+2 <n ? memo[j+2] : 0 ));
17
18 return memo[0];
19 }
20 };
相关
- 213 House Robber II
- 337 House Robber III
- 309 Best Time to Buy and Sell Stock with Cooldown
[刷题] 198 House Robber的更多相关文章
- LeetCode刷题记录(python3)
由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...
- leetcode 刷题记录(java)-持续更新
最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- LeetCode 刷题指南(1):为什么要刷题
虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...
- leetcode 198. House Robber 、 213. House Robber II 、337. House Robber III 、256. Paint House(lintcode 515) 、265. Paint House II(lintcode 516) 、276. Paint Fence(lintcode 514)
House Robber:不能相邻,求能获得的最大值 House Robber II:不能相邻且第一个和最后一个不能同时取,求能获得的最大值 House Robber III:二叉树下的不能相邻,求能 ...
- C#LeetCode刷题-动态规划
动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串 22.4% 中等 10 正则表达式匹配 18.8% 困难 32 最长有效括号 23.3% 困难 44 通配符匹配 17.7% ...
- 攻防世界Web刷题记录(新手区)
攻防世界Web刷题记录(新手区) 1.ViewSource 题如其名 Fn + F12 2.get post 3.robots robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个 ...
- ACM金牌选手整理的【LeetCode刷题顺序】
算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...
- leetcode刷题目录
leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...
随机推荐
- 学习C#第二天
变量 变量是什么? 在数学中,我们对变量的概念有一定的了解和认识,如y=x^2,其中,x,y都是变量. 定义 一个变量就是存储区(内存)中的一个存储单元 变量的声明及初始化 使用变量的步骤 声明一个变 ...
- 截取pod ip地址最后一列
资源清单: --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: init-demo namespace: test ...
- 全网最值得推荐的ELKB日志学习博客-博客地址留存
博客地址:https://elasticstack.blog.csdn.net/article/details/102728604 博客地址留存,后续解决疑难问题
- [状压DP]车II
车 I I 车II 车II 题目描述 有一个 n ∗ m n*m n∗m的棋盘 ( n . m ≤ 80 , n ∗ m ≤ 80 ) (n.m≤80,n*m≤80) (n.m≤80,n∗m≤80)要 ...
- jd的艺术
我看最近的狗东的ldz很火哈.所以我也来凑个热闹发个教程. 准备工作 1.一台openwrt系统设备 2.一个脑子 3.一双手 话不多说,开始吧! 步骤 一.链接N1(你的设备) 这里需要一款ssh工 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务
我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓"stateful applications"真正具体的一个实现(个人认为),上一章讲到有状态服务可能很 ...
- JAVAEE_Servlet_14_HttpServletRequest接口以及常用方法(一)
HttpServletRequest接口 * javax.servlet.http.HttpServletRequest 接口 * 继承关系 HttpServletRequest---继承---> ...
- Java 高精度浮点数计算工具
说起编程中的高精度数值,我第一反应就是double类型了.的确,double阶码11位,尾数52位,几乎能应对任何苛刻的要求......然而,当我天真地尝试用double来算泰勒展开式的函数值,离散代 ...
- grafana接入zabbix数据源
一.grafana介绍 grafana是开源免费的应用数据可视化仪表盘,由于zabbix本身对监控数据可视化并不侧重,所以大多使用第三方数据可视化工具来做大屏.下面向小伙伴们介绍grafana接入za ...
- 基于MATLAB的手写公式识别(1)
基于MATLAB的手写公式识别 reason:课程要求以及对MATLAB强大生命力的探索欲望: plan date:2021/3/28-2021/4/12 plan: 进行材料搜集和思路整理: 在已知 ...