leetCode之合并k个排序的列表

来源:互联网 发布:大象公会 知乎 编辑:程序博客网 时间:2024/05/21 19:32

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

    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);};

最后结果如下:
这里写图片描述

原创粉丝点击