【发布时间】:2020-03-25 17:56:43
【问题描述】:
最近我使用 Juggling 算法了解了线性时间的数组旋转。这是关于数组左旋转的sn-p。
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)
(我已经用蛮力法和反转法解决了这个问题。)
【问题讨论】:
-
请只标记一种语言,除非问题是关于这两种语言的互操作性或它们之间的差异
-
for(i=n-1;i<gcd(n,k);i--)-- 题外话,但您在循环的每次迭代中计算gcd(n,k)。只需计算一次,将其存储在一个变量中,然后在for循环中使用该变量。 -
for(i=n-1;i<gcd(n,k);i--)将立即停止,除非n < k和n是k的主要因素,当然? -
@ChrisHall 先生,我已经更正了代码。
-
@idclev463035818 我删除了重复的标签
标签: c++ arrays algorithm data-structures