对于有n个元素的数组 int a[n]={....};写一个高效算法将数组内容循环左移m位。比如: int a[6] ={1,2,3,4,5,6} ,循环左移3位得到结果{456123}。要求时间复杂度O(n), 空间复杂度O(1)。
void swapArray(int a[], int begin, int end)
{
while (begin < end)
{
swap(a[begin], a[end]);
begin++;
end--;
}
}
void reverse(int a[], int n, unsigned int m)
{
if (a == NULL || n < 1 || m == 0)
{
return;
}
m %= n;
swapArray(a, 0, m-1);
swapArray(a, m, n-1);
swapArray(a, 0, n-1);
}