簡體   English   中英

C++ 迭代器和向量

[英]C++ Iterators and Vectors

所以我解決了一個叫做“在雲端跳躍”的黑客挑戰,它涉及采取最少的步驟來結束。 總結一下問題:

艾瑪正在玩一個新的手機游戲,它以連續編號的雲開始。 有些雲是雷雨雲,有些則是積雲。 她可以在任何積雲的數字等於當前雲的數量加 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 取消引用它,boom segfault。

不想給你太大的解決方案提示,但你的邏輯有缺陷。

這是一個路徑搜索問題,我會使用遞歸。 您需要嘗試通過數組的所有有效路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM