如何合并两个同长度int数组并按奇偶索引排列?
解决数组奇偶索引合并的问题
嘿,我来帮你搞定这个数组合并的需求!你之前写的代码是把数组a全放在前面、数组b接在后面,这当然达不到奇偶索引交替的效果啦,咱们调整一下循环的索引逻辑就行。
核心思路
因为a和b长度相同,新数组c的总长度是a.length * 2(这个你原来的写法其实也对,但用a.length*2更直观)。关键是给a的元素找对偶数索引位置,给b的元素找对奇数索引位置:
- 对于a数组的第
i个元素,放到c的2*i位置(0、2、4...这些偶数索引) - 对于b数组的第
i个元素,放到c的2*i + 1位置(1、3、5...这些奇数索引)
修正后的代码示例
int[] a = {0, 1, 2, 3}; int[] b = {4, 5, 6, 7}; int[] c = new int[a.length * 2]; // 总长度是两个数组长度之和,因为a、b等长,所以等价于a.length*2 for (int i = 0; i < a.length; i++) { c[2 * i] = a[i]; // 偶数索引存放a的元素 c[2 * i + 1] = b[i]; // 奇数索引存放b的元素 } // 执行后c的值就是:[0,4,1,5,2,6,3,7],完全符合你的期望
为什么这个逻辑可行?
咱们拿例子里的i值拆解一下:
- 当
i=0时,a[0]放到c[0](偶数),b[0]放到c[1](奇数) - 当
i=1时,a[1]放到c[2](偶数),b[1]放到c[3](奇数) - 以此类推,直到循环结束,正好把两个数组的元素交替填充到c里,完美匹配你的需求。
如果之后遇到a和b长度不同的情况,你可以先取两个数组的最小长度处理前面的交替部分,剩下的元素再追加到c的末尾,但题目里明确说两个数组长度相同,所以上面的代码完全够用啦。
内容的提问来源于stack exchange,提问作者iJusPan
相关产品推荐
相关产品推荐

