将两个数组 A [‘A1’, ‘A2’, ‘B1’, ‘B2’, ‘C1’, ‘C2’, ‘D1’, ‘D2’] 和 B [‘A’, ‘B’, ‘C’, ‘D’],
合并为 [‘A1’, ‘A2’, ‘A’, ‘B1’, ‘B2’, ‘B’, ‘C1’, ‘C2’, ‘C’, ‘D1’, ‘D2’, ‘D’],java版本实现。
这算是一个小算法题,面试的时候,很可能被面试官提问,考察的不是程序实现,而是抽象逻辑。
本人看到这个需求,第一点便是找规律。
规律:
合并的数组,每2个步长作为分割点,数组A取2个元素后,取一个数组B元素
这样,合并后的数组中,数组B元素出现的位置为,2 5 8 11 ...
这其实一个等差数列,差值为3,起始值为2
实现 (java版本)
String[] a = {"A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2"}; String[] b = {"A", "B", "C", "D"}; String[] ab = new String[a.length + b.length]; int k = 2;// 等差数列起始值 int j = 0; int m = 0; for (int i = 0; i < ab.length; i++) { if (i == k) { ab[i] = b[j++]; k = k + 3; } else { ab[i] = a[m++]; } }