题目描述:
解题思路1:保存最后数字+旋转k次
将最后的数字用临时变量temp保存,前面n-1个数字往后移动,把temp的值放在数组的第一个位置。时间复杂度为O(n^2),空间复杂度为O(1)
解题思路2:创建新数组+拷贝数据
数组后K个拷贝到新数组的前K个位置,前n-k个数组拷贝到新数组的后n-k个位置
然后新数组赋值给原数组。 时间复杂度O(N),空间复杂度O(N)
解题思路3:三次逆置
数组前n-k个数字逆置,后k个数字逆置,然后整体逆置
代码实现:
void reverse(int* nums,int left,int right)
{
while(left<right)//err
{
int temp=0;
temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
left++;//err
right--;//err
}
}
void rotate(int* nums, int numsSize, int k){
k=k%numsSize;//warming
reverse(nums,0,numsSize-k-1);
reverse(nums,numsSize-k,numsSize-1);
reverse(nums,0,numsSize-1);
}