🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
首先,我们现在这里提供的是一种特别简单的思路,我们先来看一下这段代码:
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);
}