题目链接:
首先我们先观察题目,题目中给出了一个数组,一个n(用来分别X值和Y值),然后这个数组本来是[x1,x2,...y1,y2],让我们改成[x1,y1,x2,y2...]这种形式。也就是一个x值后面跟着一个y值。
我比较笨,观察出来的规律是原来是nums[i]的位置变成了nums[2*i],nums[i+n]填到了nums[2*i+1]。所以我们可以新建一个数组,用空间换时间的方法。
代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* shuffle(int* nums, int numsSize, int n, int* returnSize){
int* ret = (int*)calloc(sizeof(int),numsSize);
for(int i = 0;i < n;i++)
{
ret[2*i] = nums[i];
ret[2*i+1] = nums[i+n];
}
*returnSize = numsSize;
return ret;
}

LeetCode数组重排算法解析
博客围绕LeetCode 1470题重新排列数组展开。题目给出数组和n,需将数组从[x1,x2,...y1,y2]形式改成[x1,y1,x2,y2...]。作者观察出位置变换规律,即nums[i]到nums[2*i],nums[i+n]到nums[2*i+1],采用新建数组、空间换时间的方法解题。

被折叠的 条评论
为什么被折叠?



