要求

  • 你是一个小偷,每个房子中有价值不同的宝物,但若偷连续的两栋房子,就会触发报警系统,求最多可偷价值多少的宝物

示例

  • [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的更多相关文章

  1. LeetCode刷题记录(python3)

    由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...

  2. leetcode 刷题记录(java)-持续更新

    最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...

  3. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...

  4. LeetCode 刷题指南(1):为什么要刷题

    虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...

  5. 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:二叉树下的不能相邻,求能 ...

  6. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  7. 攻防世界Web刷题记录(新手区)

    攻防世界Web刷题记录(新手区) 1.ViewSource 题如其名 Fn + F12 2.get post 3.robots robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个 ...

  8. ACM金牌选手整理的【LeetCode刷题顺序】

    算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...

  9. leetcode刷题目录

    leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...

随机推荐

  1. 第17 章 : 深入理解 etcd:etcd 性能优化实践

    深入理解 etcd:etcd 性能优化实践 本文将主要分享以下五方面的内容: etcd 前节课程回顾复习: 理解 etcd 性能: etcd 性能优化 -server 端: etcd 性能优化 -cl ...

  2. ffmpeg第五篇:让水印图片旋转起来

    这篇把上次挖的坑填上 ffmpeg正式篇的上一篇(传送门)说了,这一篇要让水印旋转起来,但是后面有事情一直没有时间搞,今天,它来了............ 如果想实现旋转的功能,需要使用ffmpeg过 ...

  3. 一本关于HTTP的恋爱日记

    1991年 8月 我叫客户端,英文名字 client. 她叫服务端,英文名字 server. 这一年,我们出生了. 是的,我们都是90后. 我爱她,可是她却远在天边. 为了和她可以互诉衷肠,我同时发明 ...

  4. [图论]剑鱼行动:prim

    剑鱼行动 目录 剑鱼行动 Description Input Output Sample Input Sample Output 解析 难点 代码 Description 给出N个点的坐标,对它们建立 ...

  5. 深入剖析共识性算法 Raft

    一. Raft简介 1.1 Raft简介 Raft 是一种为了管理日志复制的分布式一致性算法.Raft 出现之前,Paxos 一直是分布式一致性算法的标准.Paxos 难以理解,更难以实现.Raft ...

  6. ASP.Net 管道模型 VS Asp.Net Core 管道 总结

    1 管道模型  1 Asp.Net Web Form管道 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进 ...

  7. Socket 多任务(多进程/线程、I/O多路复用、事件驱动开发框架)

    0. 概述 1. 循环版实现多连接 2. threading.Thread 多线程 3. SockerServer 实现多任务 3.1 ForkingMixIn - 多进程(限 linux) 3.2 ...

  8. Spring Cloud Alibaba(3)---Nacos概述

    Spring Cloud Alibaba(3)---nacos概述 上一篇博客讲了有关 SpringCloudAlibaba的概述,这篇开始讲SpringCloudAlibaba组件之一---Naco ...

  9. Android埋点技术概览

    注:本文同步发布于微信公众号:stringwu的互联网杂谈Android无埋点技术概览 本文是Android无埋点系列的开篇---埋点技术概览 1 背景 埋点是数据产品经理(分析师)基于业务需求,对用 ...

  10. 033- while循环语句

    语法 初始化语句; while(boolean表达式) { 循环体语句; 控制条件语句; } 执行过程: 只要boolean表达式里面的结果是true,就会执行while大括号里面的语句,直到bool ...