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