我正在解决Hackerrank中的一个问题,如下所示:
给定阵列
a
的n
整数和一个数d
,执行d
在阵列上左旋转。返回更新后的数组,以单行分隔的整数形式打印。
这是我非常简单的解决方案:
#include<iostream>
using namespace std;
int main()
{
int n,d;
cin>>n>>d;
int arr[n];
for(int i = 0; i < n; i++)
cin>> arr[i];
for(int i = 0; i < d; i++)
for(int j = 0; j < n - 1; j++)
{
arr[j] = arr[j] + arr[j + 1];
arr[j + 1] = arr[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
}
for(int i = 0; i < n; i++)
cout<<arr[i]<<" ";
}
但是它仍然抛出错误:
Terminated due to timeout :(
我可以在此脚本中进行哪些改进?任何建议都会很有帮助。提前致谢。
由于只有程序输出是有趣的,因此您不需要在数组中执行真正的旋转。
#include<iostream>
using namespace std;
int main()
{
int n,d;
cin>>n>>d;
std::vector<int> arr(n);
for(int i = 0; i < n; i++)
cin>> arr[i];
for(int i = d; i < n; i++)
cout<<arr[i]<<" ";
for(int i = 0; i < d; i++)
cout<<arr[i]<<" ";
}
甚至更少的内存消耗
int main()
{
int n,d;
cin>>n>>d;
std::vector<int> arr(d);
for(int i = 0; i < d; i++)
cin>> arr[i];
for(int i = d; i < n; i++) {
int n; cin >> n;
cout<< n <<" ";
}
for(int i = 0; i < d; i++)
cout<<arr[i]<<" ";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句