【题目】
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.
[show hint]
Hint:
Could you do it in-place with O(1) extra space?
【题目分析】采用的方法是对于数组nums,先将前n-k个对换,再将后K个对换,最后将整个数组对换。单独编写对换函数。
此题也可以一个一个的移动,移动k次即可。
【具体代码如下】
void reverse(int *num,int begin,int end);
void rotate(int* nums, int numsSize, int k) {
k=k%numsSize;
if(nums==NULL)return;
if(k==0)return ;
reverse(nums,0,numsSize-k-1);
reverse(nums,numsSize-k,numsSize-1);
reverse(nums,0,numsSize-1);
}
void reverse(int *num,int begin,int end)
{
if(num==NULL)return;
int i;
int temp;
for(;begin<end;begin++,end--)
{
temp=num[begin];
num[begin]=num[end];
num[end]=temp;
}
}
【个人总结】即便这道题是简单题,但是也需要熟练掌握。要考虑对数组边界。