如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)

How to improve my code so that it wouldn't terminate due to timeout?(HackerRank challenge)

本文关键字:终止 黑客 挑战 超时 代码 我的 何改进      更新时间:2023-10-16

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

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

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

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

你在 O(N*N( 中执行此操作,但可以在 O(N( 中完成。所以我请你通过这个 https://www.geeksforgeeks.org/array-rotation/。 如果有任何疑问,请将其注释下来。