题目:《编程之美》 P199
设计一个算法,把一个length个元素的数组循环右移k位,要求时间复杂度为O(n),且只允许使用两个附加变量。
提示:k有可能大于等于length。
void reverse(int* arr,int begin,int end)
{
while(begin<end)
{
swap(arr[begin],arr[end]);
begin++;
end--;
}
}
void RightShift(int* arr,const int length,int k)
{
if(arr==nullptr || length<=0 || k<0)
return;
k=k%length;
if(k==0)
return;
reverse(arr,0,length-1);
reverse(arr,0,k-1);
reverse(arr,k,length-1);
}