根据题意,如果使用多余数组存储空间,会导致空间复杂度为 nn,所以在这里,我们可以使用常量级的空间复杂度解法:数组翻转。
思路如下:
1,首先对整个数组实行翻转,这样子原数组中需要翻转的子数组,就会跑到数组最前面。
2,然后将数组分成两部分,前面0-k处为一个数组,后面k-n为一个数组
3,翻转o-k处的数组,再翻转k-n的数组
即可得到结果
代码如下
void reverse(int*nums,int x,int y)
{
int start=x;
int end=y;
while(start<end)
{
int temp=0;
temp=nums[start];
nums[start]=nums[end];
nums[end]=temp;
start++;
end--;
}
}
void rotate(int* nums, int numsSize, int k)
{
k=k%numsSize;
reverse(nums,0,numsSize-1);
reverse(nums,0,k-1);
reverse(nums,k,numsSize-1);
}