2 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
從您提交的代碼中,我無法弄清楚您的算法是如何完全工作的。
我可以編寫另一個(gè)算法來完成這項(xiàng)任務(wù)。
標(biāo)記每個(gè)組的第一個(gè)元素
[A,C,D] -> A
list(to_be_sorted)
從未標(biāo)記的組中的所有元素中刪除[A,C,D] -> remove [C,D]
對列表執(zhí)行排序
result ([A,B,F,G,J])
根據(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 is
F->add [E]
List is [A,C,D,B,F,E,G,J]
G->as it is
J->add [H,I]
Final Sorted List [A,C,D,B,F,E,G,J,H,I]
時(shí)間復(fù)雜度與排序算法相同

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
根據(jù)您的定義,合并給定列表和“組”(數(shù)組)中的結(jié)果的條件并不完全清楚。但是,這是使用斷言根據(jù)您的要求的解決方案
“您希望列表的第一個(gè)元素不包含在組之間插入的任何組中......”
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);
}
}
//結(jié)果
[A, C, D, B, F, E, G, J, H, I]
添加回答
舉報(bào)