题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路:
主要利用了k和轮转后各元素位置之间的关系,当然这里我写的比较复杂。
代码:
void rotate(int* nums, int numsSize, int k) {
if (nums == NULL || numsSize <= 1 || k % numsSize == 0) {
return; // 无需旋转
}
k = k % numsSize; // 防止 k 大于数组长度
//int* buf = (int*)malloc(sizeof(int) * numsSize);
int buf[numsSize];
int i = 0, j = 0;
while (k > 0) {
buf[i++] = nums[numsSize - k];
k--;
}
while(i < numsSize)
{
buf[i++] =nums[j++];
}
memcpy(nums, buf, sizeof(int) * numsSize);
}
官方题解:
void rotate(int* nums, int numsSize, int k) {
int buf[numsSize];
int i = 0;
while(i < numsSize)
{
buf[(i + k) % numsSize] = nums[i];
i++;
}
memcpy(nums, buf, sizeof(int) * numsSize);
}
问题:
1、 最开始第一个while中,nums数组存在越界。
2、直接使用了一个int指针指向nums数组,导致后面的赋值把前面的元素给覆盖掉了
3、写的太复杂了