今天,做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[];
}
};

以后遇到坑,会再补充。

vector 踩过的坑的更多相关文章

  1. 《C++之那些年踩过的坑(三)》

    C++之那些年踩过的坑(三) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. [版权声明]转载请注明原文来自:h ...

  2. 《C++之那些年踩过的坑(一)》

    C++之那些年踩过的坑(一) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 转载请注明原文来自: http:/ ...

  3. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  4. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  5. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  6. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  7. Redis Cluster踩过的坑

    Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops

  8. 第八篇:web之前端踩的一些坑

    前端踩的一些坑   前端踩的一些坑 本节内容 事件代理 清除标签的所有事件 bootstrap的模态框自定义方法 ajax在django里面实现post提交 ajax提交数据嵌套 1.事件代理 之前写 ...

  9. 使用ffmpeg视频编码过程中踩的一个坑

           今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果:                   ...

随机推荐

  1. 【二叉搜索树】的详细实现(C++)

    二叉搜索树的概念 从前面讨论折半搜索的性能中可知,如果每次从搜索序列的中间进行搜索,把区间缩小一半,通过有限次迭代,很快就能通近到所要寻找的元素.进一步,如果我们直接输入搜索序列,构造出类似于折半搜索 ...

  2. Yii2 框架下 session跨域共享互通

    在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目. 几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, ...

  3. shell脚本编程学习笔记(四)shell操作数据库

    一.数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构: ...

  4. unittest框架,漂亮的报告BeautifulReport配置与错误截图详细解说

    1.下载BeautifulReport模块 下载地址:https://github.com/TesterlifeRaymond/BeautifulReport 2.解压与存放路径 下载Beautifu ...

  5. cookie、session以及中间件

    cookie cookie是保存客户端浏览器上的键值对,是服务端设置在客户端浏览器上的键值对,也就意味着浏览器其实可以拒绝服务端的'命令',默认情况下浏览器都是直接让服务端设置键值对 设置cookie ...

  6. 【原】shell增加定时任务

    通过shell脚本增加定时任务:#CRON_FILE="/var/spool/cron/root" (centos系统) CRON_FILE="/var/spool/cr ...

  7. 解决wps for linux缺失windows字体

    操作步骤 1.下载缺失字体 链接: https://pan.baidu.com/s/1ZUbtQ96b8RVbH0LrXb_GlQ  密码: nsr4 2.解压字体 unzip wps-font-sy ...

  8. js三种常见的对话框

    js中的对话框事通过调用window对象的alert()  confirm()  和 prompt()来获得,完成人机交互. 1. 警告框alert() function alert(){ // 弹出 ...

  9. 使用jenkins 实现 .net core项目自动发布到 docker

    在Docker内运行Jenkins pull镜像  docker pull jenkins/jenkins:lts Dockerfile FROM jenkins/jenkins:lts USER r ...

  10. Cygwin不能编译及解决办法

    最近不知道什么原因,以前使用cygwin编译Android动态库,现在不能使用了,报下面的错误. Android NDK: Host 'awk' tool is outdated. Please de ...