[Leet Code] 23. Merge k Sorted Lists
- 이번 포스팅에서는 Leet Code 23번 Merge k Sorted Lists 문제를 다룬다.
Problem
- You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
- Merge all the linked-lists into one sorted linked-list and return it.
Example 1:
Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
1->4->5,
1->3->4,
2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6
Solution :
public class LeetCode_23_MergeKSortedLists {
public ListNode mergeKLists(ListNode[] lists) {
int size = lists.length;
if(size == 0) return null;
for(int dist = 1; dist < size; dist *= 2){
for (int i = 0; i < size - dist; i+=(dist * 2)) {
lists[i] = merge(lists[i],lists[i+dist]);
}
}
return lists[0];
}
static ListNode merge(ListNode l1 , ListNode l2){
ListNode head = new ListNode();
ListNode cur = head;
while (l1 != null && l2 != null) {
if (l1.val < l2.val){
cur.next = l1;
l1 = l1.next;
cur = cur.next;
}else{
cur.next = l2;
l2 = l2.next;
cur = cur.next;
}
}
cur.next = l1 != null? l1: l2;
return head.next;
}
}
- 머지소트에서 병합 과정 방식으로 해결하였다.
- 단 링크드 리스트로 구현되었다는 점이 차이점이다.
- 구현력이 매우 떨어졌다. 열심히해야지
- 한번 병합할 때, 전체 원소의 개수 즉 k * list[i].length 만큼 (N)의 시간이 걸리고 (10^4 * 500)
- 그러한 과정을 logN 만큼 반복하므로, 시간복잡도는 O(NlogN)
댓글남기기