写了两种方法
1. 用STL函数
void rotate(int num[], int n, int k){
k %= n;
if(k == 0)
return;
reverse(num, num + n);
reverse(num, num + k); //[0..k-1]
reverse(num + k, num + n); //[k..n-1]
}
2. 多循环交换
void rotate(int nums[], int n, int k) {
for (; k %= n; n -= k)
for (int i = 0; i < k; i++) //把尾端的k个元素,从nums处开始交换
swap(*(nums++), *(nums + n - k));
}
外层循环退出的条件是 k = k % n, 后k==0
可以改成recursive......
阅读全文