C++ Hackerrank已超过时间限制
我成功地解决了Hackerrank上的一个问题,它通过了所有测试用例,但我得到了一个超过错误时间限制的错误。我猜如果我优化我的代码,它会工作,但我想不出任何方法使我的代码更有效 问题是: 对大小为n的数组执行左旋转操作会将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,则该数组将变为[3,4,5,1,2] 给定一个由n个整数和一个数字d组成的数组,在该数组上执行d次左旋转。然后将更新后的数组打印为一行空格分隔的整数 有谁能告诉我如何使这段代码更有效 我的代码是:C++ Hackerrank已超过时间限制,c++,arrays,performance,optimization,C++,Arrays,Performance,Optimization,我成功地解决了Hackerrank上的一个问题,它通过了所有测试用例,但我得到了一个超过错误时间限制的错误。我猜如果我优化我的代码,它会工作,但我想不出任何方法使我的代码更有效 问题是: 对大小为n的数组执行左旋转操作会将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,则该数组将变为[3,4,5,1,2] 给定一个由n个整数和一个数字d组成的数组,在该数组上执行d次左旋转。然后将更新后的数组打印为一行空格分隔的整数 有谁能告诉我如何使这段代码更有效 我的代码
vector<int> array_left_rotation(vector<int> a, int n, int k) {
for (int j = 0; j < k; j++){
a[n] = a[0];
for (int i = 0; i < n; i++){
a[i] = a[i+1];
}
a[n-1] = a[n];
}
return a;
}
向量数组左旋转(向量a,int n,int k){
对于(int j=0;j
n是数组中的元素数
k是要执行的旋转数请尝试执行k旋转,而不是执行k旋转:
一次性将整个阵列向左旋转k。这样效率更高。如果另一个向量不会引起空间问题,您可以使用偏移量复制它们:
//Not tested
vector<int> array_left_rotation(vector<int> a, int n, int k) {
std::vector<int> result(n);
for (int j = 0; j < k; j++){
result[j]=a[(j+k)%n];
}
return result;
}
//未测试
向量数组左旋转(向量a,int n,int k){
std::向量结果(n);
对于(int j=0;j
对于此问题,不需要实际旋转阵列。公式(i+k)%n
将给出向左旋转k
次的数组中索引i
处的元素。知道这一点后,您可以通过以下方式访问每个元素:
intmain(){
int*arr,n,k,i;
cin>>n>>k;
arr=新整数[n];
对于(i=0;i>arr[i];
对于(i=0;i使用名称空间std;
#包括
int main()
{
INTA[1000000],b[1000000];
int n,d;
cin>>n;
cin>>d;
对于(int i=0;i>a[i];
}
对于(int i=0,j;in)
{
j=(i-d);
b[j]=a[i];
}
其他的
{
j=(n-d+i);
b[j]=a[i];
}
}
}
对于(int i=0;iuse?请不要在此处询问有关在线代码判断引擎的问题。任何人都不太可能告诉您他们的测试用例失败的地方,因为这些测试用例通常不会公开。即使您测试的是在您的本地环境中运行的,您也可能错过了测试在线代码判断引擎中应用的一些边缘用例llenge.要有创意,并努力找到它们。此外,从长远来看,这类问题可能没有任何价值,除了作弊在线比赛,而且什么也学不到。你只需将数组从d
位置打印到n
位置,然后从0
位置打印到d
位置,这样你就不需要旋转数组了什么?你不需要做旋转,你可以用数学。在给定的d
和n
范围内,你的方法将复制1000000000个整数。这可能需要一段时间。
using namespace std;
#include<iostream>
int main()
{
int a[1000000],b[1000000];
int n,d;
cin>>n;
cin>>d;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0,j;i<n;i++)
{
if(i==0)
{
j=n-d;
b[j]=a[i];
}
else if(i==d)
{
j=i-d;
b[j]=a[i];
}
else
{
j=(n-d+i);
if(j>n)
{
j=(i-d);
b[j]=a[i];
}
else
{
j=(n-d+i);
b[j]=a[i];
}
}
}
for(int i=0;i<n;i++)
{
cout<<b[i]<<" ";
}
}