题目描述:给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
void rotate(int* nums, int numsSize, int k) {
//开辟一个临时数组
int* tmp = (int*)malloc(sizeof(int) * numsSize);
int i = 0;
//如果k>=size,则k=k%size,减少没必要的循环
if (k >= numsSize)
{
k %= numsSize;
}
//先把后numsize-k+i个元素拷贝到tmp中去
for (i = 0; i < k; i++)
{
tmp[i] = nums[numsSize - k + i];
}
//再把前k-1个元素拷贝到tmp中去
for (i = 0; i < numsSize-k; i++)
{
tmp[k+i] = nums[i];
}
//最后,把tmp的内容拷贝到nums中去
for (i = 0; i < numsSize; i++)
{
nums[i] = tmp[i];
}
//释放动态开辟的空间
free(tmp);
tmp = NULL;
}