题目描述:
给定一个数组,将数组中的元素向右移动k个位置 其中k是非负数(循环移动的问题)
假设数组:
1 2 3 4 5 6 7 ,右移3位后:
5 6 7 1 2 3 4
题目解析:
该题目与字符串的循环移动类似,字符串循环移动
先将后面3位进行反转,再将前面的部分进行反转,最终将整个数组反转。
void ReverseArray(int *arr,int left,int right)
{
while(left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
void RotateArray(int *arr,int len,int k)
{
k %= len;
//将后k位进行反转
ReverseArray(arr,len-k,len-1);
//将前len - k进行反转
ReverseArray(arr,0,len - k -1);
//将整个数组进行反转
ReverseArray(arr,0,len-1);
}