您的位置:首页 > 编程语言 > Go语言

Algorithms—23.Merge k Sorted Lists

2015-07-24 10:21 567 查看
思路:分治思想,拆分成2个进行处理。

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists.length>2) {
ListNode[] l1=new ListNode[lists.length/2];
ListNode[] l2=new ListNode[lists.length-lists.length/2];
for (int i = 0; i < lists.length; i++) {
if (i<lists.length/2) {
l1[i]=lists[i];
}else {
l2[i-lists.length/2]=lists[i];
}
}
return mergeTwoLists(mergeKLists(l1),mergeKLists(l2));
}else if (lists.length==2){
return mergeTwoLists(lists[0],lists[1]);
}else if (lists.length==1){
return lists[0];
}else {
return null;
}
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1==null) {
return l2;
}
if (l2==null) {
return l1;
}
ListNode l=null;
if (l1.val>l2.val) {
l=new ListNode(l2.val);
l.next=mergeTwoLists(l1,l2.next);
}else {
l=new ListNode(l1.val);
l.next=mergeTwoLists(l1.next,l2);
}
return l;
}
}

耗时:356ms,第一次测的时候是中下游,再测了次变成上游了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: