亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按組對列表進行排序的效率如何?

按組對列表進行排序的效率如何?

開心每一天1111 2022-05-21 17:22:49
我需要通過一些給定的“塊”或“組”元素對給定的排序列表進行分組。例如:給定一個列表:[A, B, C, D, E, F, G, H, I, J]和團體[A, C, D][F, E][J, H, I]結果應該是[A, C, D, B, F, E, G, J, H, I]元素塊不能與非組元素混合。塊應該具有相同的順序。列表的其他元素應保持其順序。我已經找到了解決方案。但這不是您將看到的最有效的代碼。我也在使用java 6 ...
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

從您提交的代碼中,我無法弄清楚您的算法是如何完全工作的。

我可以編寫另一個算法來完成這項任務。

  1. 標記每個組的第一個元素

    [A,C,D] -> A
  2. list(to_be_sorted)從未標記的組中的所有元素中刪除

    [A,C,D] -> remove [C,D]
  3. 對列表執行排序

    result ([A,B,F,G,J])
  4. 根據 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]

時間復雜度與排序算法相同


查看完整回答
反對 回復 2022-05-21
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

根據您的定義,合并給定列表和“組”(數組)中的結果的條件并不完全清楚。但是,這是使用斷言根據您的要求的解決方案


“您希望列表的第一個元素不包含在組之間插入的任何組中......”


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]


查看完整回答
反對 回復 2022-05-21
  • 2 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號