一、题目描述
现在有多组整数数组,需要将他们合并成一个新的数组。
 合并规则从每个数组里按顺序取出固定长度的内容,合并到新的数组,取完的内容会删除掉。
 如果改行不足固定长度,或者已经为空,则直接取出剩余部分的内容放到新的数组中继续下一行。
二、输入描述
第一行,每次读取的固定长度,长度0<len<10;
 第二行是整数数组的数目,数目 0<num<10000;
 第3~n行是需要合并的数组,不同的数组用换行分割,元素之间用逗号分割,最大不超过100个元素。
三、输出描述
输出一个新的数组,用逗号分割。
四、Java算法源码
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int len = scanner.nextInt(); // 行每次读取的固定长度
    int num = scanner.nextInt(); // 整数数组的数目
    String s = scanner.nextLine(); // nextInt后有空行,先读取一次
    List<List<String>> arrays = new ArrayList<>(num);
    int maxArrayLen = 0;
    int totalLen = 0;
    for (int i = 0; i < num; i++) {
        List<String> array = Arrays.stream(scanner.nextLine().split(",")).collect(Collectors.toList());
        arrays.add(array);
        totalLen += array.size();
        maxArrayLen = Math.max(maxArrayLen, array.size());
    }
    // 计算每个数组最多需要截取几次,即遍历次数
    int cycle;
    if (maxArrayLen % len == 0) {
        cycle = maxArrayLen / len;
    } else {
        cycle = maxArrayLen / len + 1;
    }
    // 拼接结果数组
    List<String> results = new ArrayList<>(totalLen);
    int start;
    int end;
    for (int i = 0; i < cycle; i++) {
        for (List<String> array : arrays) {
            start = i * len;
            end = (i + 1) * len;
            int size = array.size();
            // 如果开始index已经大于数组最大,说明该数组取完了
            if (start > size - 1) {
                continue;
            }
            // 结束index最大为size
            if (end > size) {
                end = size;
            }
            // 取指定长度的子数组
            results.addAll(array.subList(start, end));
        }
    }
    System.out.println(String.join(",", results));
}
五、效果展示
输入:
3
 2
 2,5,6,7,9,5,7
 1,7,4,3,4
输出:
2,5,6,1,7,4,7,9,5,3,4,7
说明:
获得长度3和数组数目2
 先遍历第一行 获得2,5,6
 再遍历第二行 获得1,7,4
 再循环回到第一行获得7,9,5
 再遍历第二行获得3,4
 再回到第一行获得7

 
🏆本文收录于,华为OD机试2023(Java)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。










