[刷题] 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 ...
随机推荐
- 每天自学两小时Python,整理了最详细的学习路线和规
上次这篇文章每天自学两小时Python,三个月学通月入20K主要是给大家整理了学习资料视频和PDF书籍,很多需要的都关注私信领取了. 很多朋友领取之后都问我教程有了那么应该从哪去开始学习呢,私信太多我 ...
- .NET 开源配置组件 AgileConfig 初体验
介绍 在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善,d ...
- Redis 6.1 redis-cluster-proxy 实践说明
背景 Redis3.0版本之后开始支持了Redis Cluster,Redis也开始有了分布式缓存的概念.关于Redis Cluster的相关说明,可以看之前的几篇文章:Redis Cluster ...
- rancher的ssl部署
前言 因为我司有多套k8s环境,管理起来过于麻烦,需要一个统一的管理平台,又因为没有预留时间自己开发,经过选择后,使用rancher来进行多k8s环境的统一管理平台. 部署 1.在阿里云上申请免费的证 ...
- 显示目录下的内容--ls
ls 显示当前目录下的所有文件或者文件夹,但不包括 . 和 .. ls -a 显示当前目录下的所有文件或者文件夹 ls -l ...
- 答应我,别在go项目中用init()了
前言 go的 init函数给人的感觉怪怪的,我想不明白聪明的 google团队为何要设计出这么一个"鸡肋"的机制.实际编码中,我主张尽量不要使用init函数. 首先来看看 init ...
- 小心,别被eureka坑了
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项 ...
- 如何调试 Java 开源项目源码,记一种源码导入开发工具并调试的通用方法
楔子 说起读开源项目源码,很多朋友觉得高大上.大佬牛逼,云云~ 挡在很多人面前的不是源码怎么读,而是不知道如何导入源码到开发工具以及如何调试源码. 本文将以 spring-cloud-gateway ...
- html页面自定义文字水印效果案例
在系统开发过程中,一些数据或页面比较敏感的地方,客户会要求实现水印效果,防止内部人员截图或拍照泄露信息. 自定义文字水印顾名思义就是利用js在完成页面渲染的同时,往页面的最底层动态生成多个带水印信息的 ...
- Kubernetes部署metrics-server提示健康检测报错500,简单解决方式
为什么写? 最近有项目要用到HPA(Horizontal Pod Autoscaler)依赖了k8s的 metrics 指标才能做出自动缩扩容的动作,我这边用官方GitHub v0.4.2版本启动不起 ...