将1 2 3 4 5 6 7 8 9 10变为 1 6 2 7 3 8 4 9 5 10
C语言版
int* shuffle(int* nums, int numsSize, int n, int* returnSize) {
int* left = &nums[0];
int* right = &nums[n];
int* res = (int*)malloc(sizeof(int) * numsSize);
int index = 0;
while (left < &nums[n] && right < &nums[numsSize]) {
res[index] = *left;
res[index + 1] = *right;
index += 2;
left++;
right++;
}
*returnSize = numsSize;
return res;
}
可以发现规律,是12345和678910依次交叉排列而成的,所以你可以先将前一个数组(未排序得先排序)拆分成两个数组,然后同时遍历两个数组将元素依次放入原来的数组。
请问可以具体写一下代码吗,我是新手,实在不懂该如何拆分
你可以直接int i;
在for()循环中输入scanf("%d ",&i)
直接输出printf("1 6 2 7 3 8 4 9 5 10");
上面的是直接要结果
如果想要的是转化过程就是和楼上说的一样
leetcode有此题
import java.util.ArrayList;
import java.util.List;
public class Solution1470 {
public int[] shuffle(int[] nums, int n) {
int[] res = new int[2 * n];
for (int i = 0; i < n; i++) {
res[2 * i] = nums[i];
res[2 * i + 1] = nums[i + n];
}
return res;
}
public static void main(String[] args) {
int[] numsin = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int nin = 5;
Solution1470 s = new Solution1470();
int[] res = s.shuffle(numsin, nin);
for (int i = 0; i < res.length; i++) {
System.out.println(res[i]);
}
}
}
1
6
2
7
3
8
4
9
5
10