当前位置:网站首页>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]范围里的房子(函数的定义)
边栏推荐
- 编写方法将一个数组扁平化并且去重和递增排序
- 程序进程和线程(线程的并发与并行)以及线程的基本创建和使用
- 2022年最新重庆建筑八大员(电气施工员)模拟题库及答案
- The difference between adding or not adding the ref keyword when a variable of reference type is used as a parameter in a method call in C#
- Difference Between Stateless and Stateful
- 【1161. 最大层内元素和】
- 【MATLAB项目实战】LDPC-BP信道编码
- (26)Blender源码分析之顶层菜单的关于菜单
- Basic use of vim - bottom line mode
- Drawing process of hand-drawn map of scenic spots
猜你喜欢
UOS - WindTerm use
虹科分享|如何用移动目标防御技术防范未知因素
Design of Fire and Anti-theft System Based on Single Chip GSM
ICML2022 | 深入研究置换敏感的图神经网络
[MATLAB project combat] LDPC-BP channel coding
/etc/sysconfig/network-scripts configure the network card
基于mysql的消息队列设计
硬件设备计算存储及数据交互杂谈
Program processes and threads (concurrency and parallelism of threads) and basic creation and use of threads
【MATLAB项目实战】LDPC-BP信道编码
随机推荐
一行代码解决CoreData托管对象属性变更在SwiftUI中无动画效果的问题
2022年最新重庆建筑八大员(电气施工员)模拟题库及答案
面试题:实现死锁
Carefully organize 16 MySQL usage specifications to reduce problems by 80% and recommend sharing with the team
The difference between /usr/local/bin and /usr/bin
网络安全--通过握手包破解WiFi(详细教程)
《ArchSummit:时代的呐喊,技术人听得到》
Shell common script: Nexus batch upload local warehouse script
pycaret源码分析:下载数据集\Lib\site-packages\pycaret\datasets.py
/etc/sysconfig/network-scripts 配置网卡
TypeScript 的组件
SQL注入 Less54(限制次数的SQL注入+union注入)
Shell常用脚本:Nexus批量上传本地仓库脚本
Interview Blitz 69: Is TCP Reliable?Why?
[Reading Notes -> Data Analysis] 02 Data Analysis Preparation
信奥学习规划 信息学竞赛之路(2022.07.31)
Mysql environment installation under Linux (centos)
SQL注入 Less46(order by后的注入+rand()布尔盲注)
Difference Between Stateless and Stateful
简单的vim配置