如何对2个未排序列表进行排序并创建一个排序列表?

时间:2019-10-26 03:12:08

标签: algorithm data-structures queue

我得到了两个未排序的数组列表,只有一个排序列表。我不允许对前两个列表进行排序。

我只是将两个列表都转储到优先级队列中,然后将值拉出并放入第三个列表中。喜欢。

public static void sortList() {
        ArrayList<Integer> l1 = new ArrayList<>();
        l1.add(10);
        l1.add(11);
        l1.add(8);
        l1.add(15);
        l1.add(2);

        ArrayList<Integer> l2 = new ArrayList<>();
        l2.add(11);
        l2.add(2);
        l2.add(15);
        l2.add(18);

        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for (int i = 0; i < l1.size(); i++) {
            queue.add(l1.get(i));
        }

        for (int i = 0; i < l2.size(); i++) {
            queue.add(l2.get(i));
        }

        ArrayList<Integer> list3 = new ArrayList<>();

        while (!queue.isEmpty()) {
            System.out.println(queue.peek());
            list3.add(queue.poll());
        }

    }

还有另一种方法可以解决此问题吗?时间复杂度或空间复杂度更高?

1 个答案:

答案 0 :(得分:0)

不需要使用额外的优先级队列。

This problem can be solved using 2 methods:

方法1:

首先将2个列表连接起来,然后进行排序。

考虑Size of list 1 = nSize of list 2 = m

Time complexity: O((n + m)log(n + m))

Auxiliary Space complexity: O(n + m)

方法2:

首先对两个列表进行排序,然后合并。

Time complexity: O(nlog(n)+ mlog(m)+(n + m))

Auxiliary Space complexity: O(n + m)

结论:从上述时间复杂度可以明显看出,方法2优于方法1,并且两种方法的空间复杂度保持不变。