题目:把含有n个元素的数组循环左移K位,要求时间复杂度O(n)
法一:时间复杂度O(n),空间复杂度O(n)
左移位数k 将数组a分成两部分,把数组a的后部分复制到数组tmp中的前面部分,把a的前面部分复制到tmp的后面部分,在把tmp的元素复制到a中
void ArrayLeftShiftKBit(int *a,int n,int k)
{
if(a==NULL || k<1)
return;
int *tmp=new int[n];
k=k%n;
int i;
for (i=k;i<=n-1;i++)
{
tmp[i-k]=a[i];
}
for (i=0;i<=k-1;i++)
{
tmp[n-k+i]=a[i];
}
for (i=0;i<n;i++)
{
a[i]=tmp[i];
cout<<a[i]<<" ";
}
cout<<endl;
delete [] tmp;
}