如何计算这段代码的时间复杂度?

问题描述

我的代码显示您的步骤的时间复杂度是多少?我试图通过做 O(T*(n+n+n)) = O(T*n) 来解决这个问题。我对么?有什么建议可以使这段代码更有效吗? (问题here

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;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)