Как улучшить мой код, чтобы он не прерывался из-за тайм-аута? (Вызов HackerRank) - PullRequest
0 голосов
/ 21 июня 2020

Мой код работает довольно хорошо, но когда я отправляю его на HackerRank, он показывает мне ошибку «Ваш код не был выполнен в установленные сроки» в некоторых случаях и «успех» в остальных случаях. Вот ссылка на вызов HackerRank и то, для чего нужен код: https://www.hackerrank.com/challenges/circular-array-rotation/problem Вот мой код:

#include<iostream>
#include<math.h>

using namespace std;

int main()
{
    int n, k, q, count=0, index;
    cin>>n>>k>>q;
    int ar[n];
    for (int i = 0; i < n; i++)
    {
        cin>>ar[i];
    }
    int m[q];
    for (int i = 0; i < q; i++)
    {
        cin>>m[i];
    }
    while (count != k)
    {
        for (int i = n-1; i > 0; i--)
        {
            swap(ar[i],ar[i-1]);
        }
        count++;
    }
    for (int i = 0; i < q; i++)
    {
        index=m[i];
        cout<<ar[index]<<endl;
    }
    
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вы делаете это за O (N * N), но это можно сделать за O (N). Поэтому я прошу вас go через этот https://www.geeksforgeeks.org/array-rotation/. В случае сомнений прокомментируйте их.

0 голосов
/ 21 июня 2020

Как насчет того, чтобы рассмотреть возможность установки начальной точки массива для переменной и вычислить эту переменную, чтобы избежать циклов. Может быть много циклов или int ar [n] (я не знаю oj, поддерживает ли он). и решение может понравиться:

for(...){
    ++pos;
    if (pos == k) pos = 0;
}

, поэтому вы должны вывести массив от pos до конца и от 0 до pos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...