C++迭代器和向量
C++ Iterators and Vectors
所以我要解决一个名为"跳上云"的黑客等级挑战,它涉及采取最少的步骤来到达终点。Ill总结了这个问题:
艾玛正在玩一款新的手机游戏,从连续开始 编号的云。有些云是雷头,有些是 积云。她可以跳上任何积云,其数字是 等于当前云的数量加上 1 或 2 .她必须避免 雷头。确定所需的最小跳跃次数 艾玛从她的起始位置跳到最后一朵云。它总是 有可能赢得比赛。
云的"列表"以 0 和 1 的向量给出。 0 是"安全的" 1 的 Emma 无法跳到。
我们收到的函数是 0 和 1 的向量,如下所示:
int jumpingOnClouds(vector<int> c) {
}
所以我心想"好吧"...好吧,既然总是有可能赢得比赛,我们应该始终检查前面的 2 个空格(对于 1(,如果不是只是跳 1 个位置(。
所以我写了这样的东西(我仍然刷新C++所以我的代码可能不是很好(:
int jumpingOnClouds(vector<int> c) {
int jumps = 0;
vector<int>::iterator it = c.begin();
vector<int>::iterator it2 = c.begin();
while(it != c.end())
{
it2 = next(it,2);
if(*it2 == 0){
jumps++;
advance(it, 2);
}
else {
jumps++;
advance(it,1);
}
}
return jumps;
}
然而,这总是以段错误结束。我一般对迭代器不是很熟悉,只是通过检查迭代器文档来创建它。我的"猜测"是,如果最后一个元素是 0,我将超过最后 2。第一个输入列表是0 0 1 0 0 1 0
所以看起来它会跳到pos1,然后跳两次到pos3,然后跳到pos4,最后跳两次到最后一个pos然后停止。所以最初似乎不应该失败。
我确定我错过了一些明显的东西。
it2 = next(it,2)
it2可能已经过了向量的末尾,一旦你用 *it2 取消引用它,繁荣段错误。
不想给你太大的解决方案提示,但你的逻辑存在缺陷。
这是一个路径搜索问题,我会使用递归。您需要尝试通过数组的所有有效路径。
相关文章:
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- 如何取消引用向量迭代器
- Map中的(字符串的)向量迭代器
- C++将向量迭代器转换为索引
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++向量迭代器nth_element编译错误
- 无法查找值初始化的向量迭代器?
- STD ::向量迭代器类型和允许的操作
- 向量迭代器 < 或 !=
- 向量迭代器在新对象的 push_back() 之后不兼容
- 向量迭代器对于包装器类不可取消引用(没有超出 end() 取消引用)
- C++向量迭代器不是增量的
- 使用向量迭代器的合并矢量
- 向量迭代器不可递增
- 向量迭代器进行循环
- 向量迭代器与c++不兼容
- 向量迭代器不可解引用C++
- C++将向量迭代器与实例进行比较
- 编译错误 ::向量 ::迭代器