存储在数组中的整数的旋转

时间:2017-08-16 21:04:22

标签: c++ arrays

我在给定的数组中做了一个简单的整数旋转程序。

#include <iostream>
using namespace std;

int main()
{
 int t;
 cin>>t;
 long i,j,n,k,l,m,x;
 long a[1000000];
 for(i=0;i<t;i++){
    cin>>n;
    cin>>k;
    for(j=0;j<n;j++){
        cin>>a[j];
    }
    for(m=0;m<k;m++){
        x=a[0];
        for(j=1;j<n;j++){
            x=a[j]+x;
            a[j]=x-a[j];
            x=x-a[j];
        }
        a[0]=x;
    }
    for(j=0;j<n;j++){
        cout<<a[j]<<" ";
    }
    cout<<endl;
 }
 return 0;
}

可以找到问题here。我的代码很容易处理小输入,但是当输入达到数千个数量级时,它会花费超过一秒钟,并且由于这个原因而失败。有关如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分:0)

可以用来加快速度的一些注意事项:

  1. 当K> N时,旋转K,相当于旋转K%N(因为N的每次旋转都是昂贵的无操作)。
  2. 您实际上不需要生成旋转的数组;您只需要打印出旋转数组中显示的值。
  3. 实际上,您(不一定)不需要将所有输入存储在数组中,而只需要在读取数组中的最后一个值之前无法打印的部分。 (如果两者都通过控制台,这将使输入和输出混合,但如果至少有一个是文件则不会。)
  4. 这些可用于将您的O(N ^ 2)解决方案变为O(N)解决方案。