leetCode之合并k个排序的列表

时间:2022-02-09 21:05:10

题目:
leetCode之合并k个排序的列表
首先对于该题目想到的是参考归并排序的方法。
具体思想为:同时针对于无数个数组,我们应该将含多个链表的原始数组分割成较小的数组,后再将小数组合并成较大的数组,知道最后只有一个排序完成的数组。具体代码如下:

    var mergeKLists = function(lists) {
var length = lists.length;
function sortList(list, beg, end){
if(beg > end) {
return list;
}

if(beg === end) {
return list[beg];
}

var mid = Math.floor((end + beg)/2);
var left = sortList(list,beg,mid);//这里采用递归划分数组的大小,可以提高时间复杂度
var right = sortList(list,mid+1,end);

return merge(left, right);
}
function merge(l1,l2) {
var node=new ListNode(0);
var sortArray=node;//这里采用的是对象的浅拷贝
while(l1!==null &&l2!==null) {
if(l1.val<l2.val){
sortArray.next = new ListNode(l1.val);
l1=l1.next;
}else{
sortArray.next = new ListNode(l2.val);
l2=l2.next;
}
sortArray=sortArray.next;
}
while(l1!==null){
sortArray.next=new ListNode(l1.val);
l1=l1.next;
sortArray=sortArray.next;
}
while(l2!==null){
sortArray.next=new ListNode(l2.val)
l2=l2.next;
sortArray=sortArray.next;
}
return node.next;//将首个节点元素去掉
}
return sortList(lists,0,length-1);
};

最后结果如下:
leetCode之合并k个排序的列表