Algorithm 如何对2个未排序的列表进行排序并创建一个已排序的列表?
我得到了两个未排序的ArrayList,它们只有一个排序列表。不允许我对前两个列表进行排序 我只是将这两个列表都转储到优先级队列中,然后取出值并将其放入第三个列表中。像Algorithm 如何对2个未排序的列表进行排序并创建一个已排序的列表?,algorithm,data-structures,queue,Algorithm,Data Structures,Queue,我得到了两个未排序的ArrayList,它们只有一个排序列表。不允许我对前两个列表进行排序 我只是将这两个列表都转储到优先级队列中,然后取出值并将其放入第三个列表中。像 public static void sortList() { ArrayList<Integer> l1 = new ArrayList<>(); l1.add(10); l1.add(11); l1.add(8); l1.
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());
}
}
publicstaticvoidsortlist(){
ArrayList l1=新的ArrayList();
l1.加入(10);
l1.加入(11);
l1.加入(8);
l1.加入(15);
l1.加入(2);
ArrayList l2=新的ArrayList();
l2.添加(11);
l2.添加(2);
l2.添加(15);
l2.添加(18);
PriorityQueue=新建PriorityQueue();
对于(int i=0;i
有没有另一种方法可以解决这个问题,时间复杂度或空间复杂度更好?不需要使用额外的优先级队列
这个问题可以用两种方法解决:
方法1:
首先连接两个列表,然后排序
考虑到,列表1的大小=n
和列表2的大小=m
时间复杂度:
O((n+m)log(n+m))
辅助空间复杂性:
O(n+m)
方法2:
首先对两个列表进行排序,然后合并
时间复杂度:
O(nlog(n)+mlog(m)+(n+m))
辅助空间复杂性:
O(n+m)
结论:从上述时间复杂度来看,方法2明显优于方法1,两种方法的空间复杂度保持不变。将两个列表添加到
list3
,然后对list3
进行排序。因此,时间复杂度相同,但没有额外的空间?是的,没有额外的空间。从技术上讲,时间复杂度是相同的,但常数因子(以及运行时间)应该更低。@am1212,我的回答解决了你的问题吗?我想问题清楚地说,在合并之前不要对两个列表进行排序。。