当前位置:网站首页>LeetCode--The problem of robbery
LeetCode--The problem of robbery
2022-08-01 00:02:00 【HUAWEI CLOUD】
打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警.
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额.
示例 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
class Solution {private: int tryRob( vector<int> &nums, int index ) { if ( index >= nums.size() ) return 0; for( int i = index; i < nums.size(); i++ ) res = max( res, nums[i] + tryRob(nums, i + 2) ); return res; }public: int rob(vector<int>& nums) { return tryRob(nums, 0); }};
记忆化搜索
class Solution {private: // memo[i] 表示考虑抢劫 nums[i..n]所能获得的最大收益 vector<int> memo; int tryRob( vector<int> &nums, int index ) { if ( index >= nums.size() ) return 0; if ( memo[index] != -1) return memo[index]; int res = 0; for( int i = index; i < nums.size(); i++ ) res = max( res, nums[i] + tryRob(nums, i + 2) ); memo[index] = res; return res; }public: int rob(vector<int>& nums) { memo = vector<int>(nums.size(), -1); return tryRob(nums, 0); }};
动态规划
class Solution {public: int rob(vector<int>& nums) { int n = nums.size(); if ( n == 0) return 0; vector<int> memo(n, -1); memo[n-1] = nums[n-1]; for( int i = n - 2; i >= 0; i-- ) { for( int j = i; j < n; j++ ) { memo[i] = max( memo[i], nums[j] + (j+2 < n ? memo[j+2] : 0) ); } } return memo[0]; }};
change the definition of state:
考虑偷取[0…x]范围里的房子(函数的定义)
边栏推荐
- Interview Blitz 69: Is TCP Reliable?Why?
- 一文概述:VPN的基本模型及业务类型
- Usage of mysql having
- Advanced Algebra _ Proof _ Any matrix is similar to an upper triangular matrix
- 推荐系统:常用评价指标总结【准确率、精确率、召回率、命中率、(归一化折损累计增益)NDCG、平均倒数排名(MRR)、ROC曲线、AUC(ROC曲线下的面积)、P-R曲线、A/B测试】
- How to reduce the gap between software design and implementation
- SQL injection Less42 (POST type stack injection)
- 2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。 求,允许施展一次魔法
- 南方科技大学:Xiaoying Tang | AADG:视网膜图像分割领域泛化的自动增强
- 基于单片机GSM的防火防盗系统的设计
猜你喜欢
【读书笔记->数据分析】02 数据分析准备
游戏安全03:缓冲区溢出攻击简单解释
IJCAI2022 | 代数和逻辑约束的混合概率推理
(26) About menu of the top menu of Blender source code analysis
C# Rectangle basic usage and picture cutting
什么是客户画像管理?
Matlab / ArcGIS 处理GPM全球月均降水数据
TFC CTF 2022 WEB Diamand WriteUp
面试突击69:TCP 可靠吗?为什么?
Design of Fire and Anti-theft System Based on Single Chip GSM
随机推荐
如何撰写出一篇优质的数码类好物推荐文
继承和友元,静态成员的关系
2022年CSP-J1 CSP-S1 第1轮初赛 报名指南
Drawing process of hand-drawn map of scenic spots
EntityFramework保存到SQLServer 小数精度丢失
[MATLAB project combat] LDPC-BP channel coding
C# Rectangle基本用法和图片切割
SQL injection Less38 (stack injection)
【读书笔记->数据分析】02 数据分析准备
【Acwing】The 62nd Weekly Game Solution
When can I use PushGateway
[AMEX] LGBM Optuna美国运通信用卡欺诈赛 kaggle
无状态与有状态的区别
《ArchSummit:时代的呐喊,技术人听得到》
Daily--Kali opens SSH (detailed tutorial)
10大主流3D建模技术
NgRx 里 first 和 take(1) 操作符的区别
【1161. 最大层内元素和】
Pylint检查规则中文版
Interview Question: Implementing Deadlocks