紀念第一道沒有看題解做出來的困難題
分治思想+歸併排序實現合併K個排序鏈表
由於是實現一連串已經排序的鏈表,所以第一時間想到了歸併排序
又由於是實現多個鏈表的總排序,爲了減少時間複雜度又想到了分治思想,這一題中也就是二分法
做了這麼多天的題總算有點進步
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
int len = lists.length;
if(lists == null || len == 0) {
return null;
}
//結果數組的頭結點
//ListNode res = new ListNode(0);
ListNode res = mergeKLists(lists, 0, len-1);
return res;
}
private ListNode mergeKLists(ListNode[] lists, int left, int right) {
if(left == right) {
System.out.println("=");
return lists[left];
}
int mid = left + (right - left)/2;
ListNode leftList = mergeKLists(lists, left, mid);
ListNode rightList = mergeKLists(lists, mid+1, right);
return mergeSort(leftList, rightList);
}
private ListNode mergeSort(ListNode leftList, ListNode rightList) {
ListNode temp = new ListNode(0);
ListNode res = temp;
while(leftList != null && rightList != null) {
if(leftList.val <= rightList.val) {
temp.next = leftList;
leftList = leftList.next;
temp = temp.next;
} else {
temp.next = rightList;
rightList = rightList.next;
temp = temp.next;
}
}
if(leftList == null) temp.next = rightList;
if(rightList == null) temp.next = leftList;
System.out.println(res.next.val);
return res.next;
}
}