首页 > 解决方案 > 如何计算这段代码的时间复杂度?

问题描述

显示您的步骤的代码的时间复杂度是多少?我试图通过 O(T*(n+n+n)) = O(T*n) 来解决这个问题。我对么?以及使此代码更高效的任何建议?(这里有问题)

int T, n;
cin >> T;
while (T--) { //O(T)
    //inputting p[n]
    scanf_s("%d", &n);
    int* p = new int[n];
    for (int i = 0; i < n; i++) { //O(n)
        scanf_s("%d", &p[i]);
    }

    vector <int>indeces;
    vector <int>afterIndex;

    while (n != 0) { //o(n)
        //*itr = largest element in the array
        auto itr = find(p, p + n, *max_element(p, p + n));
        int index = distance(p, itr);
        indeces.push_back(index); //push_back index
        afterIndex.push_back(n - index - 1); //push_back number of elements after the index
        //deleting element by decreasing n:
        n = index;
    }

    int i2 = 0;
    int i = indeces[i2];
    while(i2!=indeces.size()){ //let's say it's o(n)
        cout << p[i] << endl;
        i++;
        if (i > indeces[i2] + afterIndex[i2]) {
            i2++;
            if (i2 == indeces.size()) {
                break;
            }
            i = indeces[i2];
        }
    }


    delete[] p;
}
return 0;

标签: c++visual-c++

解决方案


推荐阅读