博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 198, 213 House Robber
阅读量:5718 次
发布时间:2019-06-18

本文共 1451 字,大约阅读时间需要 4 分钟。

198 House Robber

DP

0~n-1     ans=dp[n-1]

dp[i] = max(dp[i-2]+nums[i], dp[i-1])  i>=2

如果要输出偷了那些房子,可以用backpointer来记录 argmax dp[i],即记录dp[i] 是通过 i-1 还是 i-2 得到最大值的。

所有dp问题都可以用backpointer来找.

class Solution {public:    int rob(vector
& nums) { int n=nums.size(); if (n==0) return 0; if (n==1) return nums[0]; if (n==2) return max(nums[0],nums[1]); vector
dp(n); vector
bp(n); //record the the previous index : argmax dp[i] dp[0] = nums[0]; bp[0]=-1; dp[1] = max(nums[0],nums[1]); bp[1]=-1; for (int i=2;i
=dp[i-1]){ dp[i] = dp[i-2]+nums[i]; bp[i] = i-2; }else{ dp[i] = dp[i-1]; bp[i] = i-1; } } vector
res; int pos=bp[n-1]==n-2?n-2:n-1; while (pos!=-1){ res.push_back(nums[pos]); pos = bp[pos]; } reverse(res.begin(),res.end()); for (auto x:res) cout<
<<' '; return dp[n-1]; }};

 

  

213 House Robber II

Since we cannot rob nums[0] and nums[n-1] at the same time, we can divide this problem into two cases:

not rob nums[0]

not rob nums[n-1]

and the answer is the maximum one.

C++ stl vector可以用 vector<int> nums1(nums.begin(), nums.end())来初始化 比较实用

转载于:https://www.cnblogs.com/hankunyan/p/8874287.html

你可能感兴趣的文章
关于C#面向对象2
查看>>
Javascript String类的属性及方法
查看>>
vim编辑器如何添加或删除多行注释
查看>>
[LeetCode] Merge Intervals
查看>>
2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】
查看>>
iOS开发-按钮的基本使用
查看>>
在QT和SDL搭建的框架中使用OPENGL在SDL窗口上进行绘图
查看>>
REST技术第三步 @BeanParam的使用
查看>>
模板 读入挂!
查看>>
SharePoint 读取 Site Columns 的数据并绑定到DropdownList
查看>>
Python中的对象行为与特殊方法(二)类型检查与抽象基类
查看>>
Ubuntu 16.04服务器版查看DHCP自动分配的IP、网关、DNS
查看>>
使用 axios 详解
查看>>
通信基站(dfs回溯,思维)
查看>>
nginx web加密访问
查看>>
iOS - Regex 正则表达式
查看>>
SYS_CONTEXT函数返回IP地址的一些误解
查看>>
第 68 章 Logical Volume Manager (LVM)
查看>>
膝盖中了一箭之康复篇-第八个月暨2月份目标总结
查看>>
CentOS 7 开放防火墙端口命令
查看>>