首页 > 解决方案 > 如何改进我的代码,使其不会因超时而终止?(HackerRank 挑战)

问题描述

我的代码运行良好,但是当我在 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;
}

标签: c++timeout

解决方案


如何考虑将数组的起点设置为一个变量,并计算这个变量以避免循环。可能有很多循环或int ar [n](我不知道oj是否支持)。解决方案可能喜​​欢:

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

所以你应该做的是将数组从 pos 输出到 end,从 0 输出到 pos


推荐阅读