题目:
首先暗含了信息就是 ----- k如果等于数组大小的话是 等于没有移动的
第一就是要k化为 有效移动次数 x%=y ----> 把x限定在y以内 (默认y<=x)
然后就是想到 是在数组内直接移动好写 还是创建新数组接收 最后复制到原数组方便
显然是后者
END
以下是代码图
(动态分配比静态初始化用时要短...不过小题区别好像不是很大)
void rotate(int* nums, int numsSize, int k) {
int *ans=malloc(sizeof(int)*numsSize);
k = k % numsSize; // 处理k大于数组长度的情况
// 因为k等于numsSize实际上就会等于没有旋转
// 不如直接取模 得到实际改变位置的旋转次数
for (int i = 0; i < numsSize; i++) {
int newIndex = (i + k) % numsSize; // 计算新索引
ans[newIndex] = nums[i]; // 将元素放入新数组
}
// 将新数组的内容复制回原数组
for (int i = 0; i < numsSize; i++) {
nums[i] = ans[i];
}
free(ans);
}