題目描述:
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。
示例:輸入:
[1->4->5,
1->3->4,
2->6
]輸出: 1->1->2->3->4->4->5->6
1.遍歷一遍所有鍊錶(o(n)),將所有元素加入到列表中,對列表排序(o(nlogn)),然後新增到乙個新的鍊錶(空間複雜度o(n))返回
public static listnode mergeklists(listnode lists)
} collections.sort(list);
listnode root = new listnode(-1);
listnode copy = root;
for (integer val : list)
return root.next;
}
2.利用優先佇列,也就是小頂堆,然後每次彈出最小的,重建鍊錶
/**
* 時間複雜度: o(nlogk) ,其中k 是鍊錶的數目
* 空間複雜度:
* o(n) 創造乙個新的鍊錶需要 o(n)
* @param lists
* @return
*/public static listnode mergeklists2(listnode lists)
listnode head = new listnode(0);
//優先佇列--->也就是小頂堆
priorityqueuepq = new priorityqueue();
for (listnode node : lists)
} listnode curr = head;
while (!pq.isempty())
return head.next;
}
分治實現LeetCode 23題 合併K個排序鍊錶
紀念第一道沒有看題解做出來的困難題 分治思想 歸併排序實現合併k個排序鍊錶 由於是實現一連串已經排序的鍊錶,所以第一時間想到了歸併排序 又由於是實現多個鍊錶的總排序,為了減少時間複雜度又想到了分治思想,這一題中也就是二分法 做了這麼多天的題總算有點進步 class solution 結果陣列的頭結點...
LeetCode 23 合併 K個排序序列
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解題思路 採用分治的思想,將 k 個鍊錶的合併問題轉換成,合併 2 個有序鍊錶的問題 typedef struct listnode list 定...
Leetcode23 合併K個排序鍊錶
題目 解題思路 這道題使用的是分治演算法。首先還用輔助函式mergetwolists 用來合併兩個有序單鏈表,不申請額外的空間實現原地合併。如下 listnode mergetwolists listnode l1,listnode l2 else head nexthead while l1 nu...