Недавно я узнал о вращении массива за линейное время, используя алгоритм жонглирования. Вот фрагмент относительно левого поворота массива.
void ArrayRotate (int A[], int n, int k)
{
int d=-1,i,temp,j;
for(i=0;i<gcd(n,k);i++)
{
j=i;
temp=A[i];
while(1)
{
d=(j+k)%n;
if(d==i)
break;
A[j]=A[d];
j=d;
}
A[j]=temp;
}
}
, но теперь я застрял, как использовать этот алгоритм жонглирования для вращения массива в правильном направлении.
1,2,3,4,5 (given array)
5,1,2,3,4 (after 1 right rotation)
(Я решил этот вопрос, используя метод грубой силы и метод обращения).