今天,做LeetCode上的一道题,198题:Rob House,在纸上画了画,发现了重复的结构,就使用了递归的方式实现的

 #include<iostream>
#include<vector> using namespace std; class Solution {
private:
vector<int> memo;
// consider try rob from [index..n-1],it does not mean rob the index house,it just rob from range
// [index...n-1]
int tryRob(vector<int>& nums,int index){
if(index >= nums.size())
return ;
if(memo[index] != -)
return memo[index];
int val = ;
for(int i = index;i<nums.size();i++)
val = max(val,nums[i] + tryRob(nums,i+));
memo[index] = val;
return val;
} public:
int rob(vector<int>& nums) {
for(int i = ; i < nums.size() ; i ++)
// memo[i] = -1;
// 采坑1
// 我们向 vector 中插入元素,是通过push_back()函数,并且注意当vector<int> vec;时,声明的是一个空向量,
// 因此,不能采用下标的方式访问元素,只有! !!先通过push_back()函数加入元素后,才能采用下标的方式
// 访问元素!!!,但是下标方式仅能对确知已存在的元素进行下标操作。如果使用下标定位元素然后修改,
// 只能是修改size以内的元素才能成功.一开始vector为空时,不能对其进行下标赋值。而要用push_back().
memo.push_back(-);
return tryRob(nums, );
}
}; int main(){
vector<int> nums = {,,,,};
cout<<Solution().rob(nums)<<endl;
return ;
}

一开始,运行,不输出结果

我又重新思考了程序的逻辑,觉得没问题,所以想可能是编译的问题,因为,平时对于小程序,我不用IDE的,都是使用Sublime3编辑器的,我把sublime3安装了一些插件,可以编译运行C++,(不过调试功能没配置好,配置完成后,还是有一些问题,找了好久也就没再坚持,毕竟基本上是用来写小的程序而不是大的项目,也不需要调试功能,如果看到这篇博客的同学配置成功的可以告知我,谢谢哦!)也可以写python,markdown等,所以,我直接贴到leetcode 上了,runtime error  : reference binding to null pointer of type 'value_type' ,我才意识到,memo没有初始化,就检索了vector初始化,原来,我一直认定的是错误的,我觉得vector支持迭代器,下标访问,就想当然的认为对一个没经过任何初始化的vector可以使用下标操作。既是教训也是经验。写出来共勉。

其实,这题还可以使用动态规划,上面说了,有重叠子问题

 class Solution {
public:
int rob(vector<int>& nums){
int n = nums.size();
if(n == )
return ;
// memo[i] : can get the max value if consider rob nums[i...n-1]
vector<int> memo(n,);
memo[n-] = nums[n-];// abvious,nums[n-1,n) has only nums[n-1],
//(nums[i...n-1] ,can repretation [i...n))
for(int i = n-;i>=;i--)
for(int j = i;j<n;j++)
//memo[i] = max(memo[i],nums[j] + memo[j+2])
memo[i] = max(memo[i],nums[j] + (j+<n? memo[j+]:));
return memo[];
}
};

以后遇到坑,会再补充。

最新文章

  1. O365(世纪互联)SharePoint 之使用列表库发布新闻
  2. 十分钟搞定微信企业帐号“echostr校验失败,请您检查是否正确解密并输出明文echostr”
  3. React Native – 使用 JavaScript 开发原生应用
  4. linux 远程桌面的配置
  5. 怎样用ZBrush中的Curves和Insert笔刷创建四肢
  6. ___security_cookie机制,防止栈溢出
  7. H-ui小技巧
  8. SRM 586 DIV1 L1
  9. 我写了个教程《一步步教你把ubuntu安装到U盘》
  10. JSP页面之${fn:}内置函数
  11. iOS iOS与html进行交互
  12. Python Tkinter canvas oval原理
  13. java与C#的简单比较
  14. SQLServer-----使用jTDS连接SQLServer数据库
  15. linux操作数据库
  16. 大数据学习-2 认识Hadoop
  17. es6 Set 结合 Array.from 用法
  18. Activiti 5.18启动流程到完成所有任务之间的数据库变化(转)
  19. 解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi&#39;错误的问题
  20. Game of War - Fire Age 有何特别之处?

热门文章

  1. map-apply-applymap
  2. 常用的MQ命令
  3. vue移动端项目在手机上调试
  4. K8S集群搭建之软路由的安装
  5. jquery 获取 父级 iframe 里的控件对象
  6. winform 多个datagridview 之间同步滚动
  7. 线上BUG定位神器(阿尔萨斯)-Arthas2019-0801
  8. plupload上传视频插件jQuery+php
  9. 极简的js点击组图切换效果
  10. 【PAT甲级】1094 The Largest Generation (25 分)(DFS)