这些嵌套循环的Big-O是什么

时间:2020-04-19 12:03:01

标签: algorithm big-o

在解决了cp问题(下面的实现)之后,我很难进行大型O分析,我觉得很舒服。 这是实现:

    // argument arrays (alice and scores)

    // captures scores
    auto findRank = [&](int score, int lastRankIndex) {
        // resumes from last returned index
        for(auto i=lastRankIndex-1; i>=0; --i) {
            if(scores[i] == score) return i+1;
            else if(scores[i] > score) return i+2;
        }
        return 1;
    };
    vector<int> ranks;
    ranks.reserve(alice.size());
    int lastRankIndex = scores.size();

    // loop over alice
    for(const auto& a : alice) {
        ranks.push_back(findRank(a, lastRankIndex));
        lastRankIndex = ranks.back() - 1;
    }

findRank lambda将会(在lastRankIndex的帮助下)始终在先前返回的索引处恢复。这意味着两个数组alicescores在我们的情况下可以具有不同的大小,将仅循环一次。 在这种情况下,特别是当内部循环数组大于外部循环数组时,大O应该是什么?

0 个答案:

没有答案