C++迭代器和向量

C++ Iterators and Vectors

本文关键字:向量 迭代器 C++      更新时间:2023-10-16

所以我要解决一个名为"跳上云"的黑客等级挑战,它涉及采取最少的步骤来到达终点。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 取消引用它,繁荣段错误。

不想给你太大的解决方案提示,但你的逻辑存在缺陷。

这是一个路径搜索问题,我会使用递归。您需要尝试通过数组的所有有效路径。