方法一:暴力解决
方法二:创建一个空数组, 旋转的结果由第数组倒着取出k个,再正着取出numsize-k个数字组成新数组拼成结果
方法三:将原数组分为两部分,后k个为第一部分,剩余为第二部分,分别颠倒这两部分,最后颠倒整个数组
例如数组为 1,2,3,4,5,6,7 向右旋转3个数
第一部分为 5,6,7第二部分为1,2,3,4
先颠倒第二部分结果为4,3,2,1,5,6,7
再颠倒第一部分4,3,2,1,7,6,5
再颠倒整个数组5,6,7,1,2,3,4就得到结果了,空间复杂度为o(1)
void reverse(int* num,int k)
{
int head = 0;
int end = k -1;
while(head < end)
{
int tmp = num[head];
num[head] = num[end];
num[end] = tmp;
head++;
end--;
}
}
void rotate(int* nums, int numsSize, int k)
{
k %= numsSize;
if(0 == k)
{
return;
}
reverse(nums,numsSize -k);
reverse(nums + numsSize -k, k);
reverse(nums,numsSize);
}