Rotate array
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
Note: Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
实现
void rotate(int nums[], int n, int k) { int temp; for (int step = 0; step < k; step++) { temp = nums[n-1]; for (int i = n-1; i > 0; --i) { nums[i] = nums[i-1]; } nums[0] = temp; } }
上面这个实现容易理解,但是效率不高,会报超时的错误。下面这个实现效率有极大的提升:
void rotate(int nums[], int n, int k) { k = k % n; if (k == 0) return; int *temp = new int[n]; memcpy(temp, nums+(n-k), sizeof(int)*k); memcpy(temp+k, nums, sizeof(int)*(n-k)); memcpy(nums, temp, sizeof(int)*n); delete[] temp; }
上面是C++的风格,C语言可以如下写法:
void rotate(int nums[], int n, int k) { k=k%n; if(k==0) return; int *temp,a[n]; temp = a; memcpy(temp, nums+(n-k), sizeof(int)*k); memcpy(temp+k,nums, sizeof(int)*(n-k)); memcpy(nums, temp, sizeof(int)*n); }