拉风的咖菲猫
从您提交的代码中,我无法弄清楚您的算法是如何完全工作的。我可以编写另一个算法来完成这项任务。标记每个组的第一个元素[A,C,D] -> Alist(to_be_sorted)从未标记的组中的所有元素中删除[A,C,D] -> remove [C,D]对列表执行排序result ([A,B,F,G,J])根据 Mark 放置移除的元素Initial Sorted List [A,B,F,G,J]A->add [C,D]List is [A,C,D,B,F,G,J]B->as it isF->add [E]List is [A,C,D,B,F,E,G,J]G->as it isJ->add [H,I]Final Sorted List [A,C,D,B,F,E,G,J,H,I]时间复杂度与排序算法相同
HUX布斯
根据您的定义,合并给定列表和“组”(数组)中的结果的条件并不完全清楚。但是,这是使用断言根据您的要求的解决方案“您希望列表的第一个元素不包含在组之间插入的任何组中......”public class MergeArrays { private static final List<String> FIRST = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")); private static final List<String> SECOND = new ArrayList<>(Arrays.asList("A", "C", "D")); private static final List<String> THIRD = new ArrayList<>(Arrays.asList("F", "E")); private static final List<String> FOURTH = new ArrayList<>(Arrays.asList("J", "H", "I")); public static List<String> merge(List<String> source, List<String>... lists) { List<String> result = new ArrayList<>(); for (List<String> list : lists) { for (String value : list) { source.remove(value); } } for (List<String> list : lists) { String value = null; if (source.size() > 0) { value = source.get(0); source.remove(0); } result.addAll(merge(value, list)); } return result; } public static List<String> merge(String value, List<String> list) { List<String> result = new ArrayList<>(list); if (value != null) { result.add(value); } return result; } public static void main(String[] args) { List<String> result = merge(FIRST, SECOND, THIRD, FOURTH); System.out.println(result); }}//结果[A, C, D, B, F, E, G, J, H, I]