🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
首先,我们现在这里提供的是一种特别简单的思路,我们先来看一下这段代码:
void rotate(int* nums, int numsSize, int k) {
k%=numsSize;
int newnum[numsSize];
memcpy(newnum,nums+numsSize-k,sizeof(int)*(k));
memcpy(newnum+k,nums,sizeof(int)*(numsSize-k));
memcpy(nums,newnum,sizeof(int)*(numsSize));
}
我们可以先对后面轮转,再对前面轮转,再整体轮转一次,这样子就可以了。
接下来,我们讲一下另外一种方法:
void Reverse(int*num,int left,int right)
{
while(left<right)
{
int tmp=num[left];
num[left]=num[right];
num[right]=tmp;
left++;
right--;
}
}
void rotate(int* nums, int numsSize, int k)
{
k%=numsSize;
int newnum[numsSize];
Reverse(nums,numsSize-k,numsSize-1);
Reverse(nums,0,numsSize-k-1);
Reverse(nums,0,numsSize-1);
}