1.分析
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
首先通过分析,要将数组中的各个元素都挪动位置,所以考虑到,如果在同一数组内操作会因为前面位置已经被修改而达不到效果,于是要另开辟一个相同大小的数组存放数据,然后再将数据进行拷贝,其次,新开辟的数字中的每个元素都是原数组向右挪动得到的,因此,新数组中的每个元素向左挪动也可得到原数组,于是就得到了以下关系
newArr[(i + k) % numsSize] = nums[i];
利用此关系,使用for循环将数组每个位置的值都计算并插入好就得到了想要的挪动后的数组
2.代码实现
void rotate(int* nums, int numsSize, int k) { int newArr[numsSize]; for (int i = 0; i < numsSize; ++i) { newArr[(i + k) % numsSize] = nums[i]; } for (int i = 0; i < numsSize; ++i) { nums[i] = newArr[i]; } }
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!