LeetCode - Hard - 23. Merge k Sorted Lists

╰半橙微兮° 2023-01-06 05:41 199阅读 0赞

Topic

  • Linked List
  • Divide and Conquer
  • Heap

Description

https://leetcode.com/problems/merge-k-sorted-lists/

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:

  1. Input: lists = [[1,4,5],[1,3,4],[2,6]]
  2. Output: [1,1,2,3,4,4,5,6]
  3. Explanation: The linked-lists are:
  4. [
  5. 1->4->5,
  6. 1->3->4,
  7. 2->6
  8. ]
  9. merging them into one sorted list:
  10. 1->1->2->3->4->4->5->6

Example 2:

  1. Input: lists = []
  2. Output: []

Example 3:

  1. Input: lists = [[]]
  2. Output: []

Constraints:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] is sorted in ascending order.
  • The sum of lists[i].length won’t exceed 10^4.

Analysis

LeetCode 21. Merge Two Sorted Lists的延伸。

Submission

  1. import com.lun.util.SinglyLinkedList.ListNode;
  2. public class MergeKSortedLists {
  3. public ListNode mergeKLists(ListNode[] lists) {
  4. ListNode result = null;
  5. if (lists == null)
  6. return result;
  7. for (ListNode list : lists) {
  8. result = mergeTwoList(result, list);
  9. }
  10. return result;
  11. }
  12. private ListNode mergeTwoList(ListNode l1, ListNode l2) {
  13. if (l1 == null) {
  14. return l2;
  15. } else if (l2 == null) {
  16. return l1;
  17. } else if (l1.val < l2.val) {
  18. l1.next = mergeTwoList(l1.next, l2);
  19. return l1;
  20. } else {
  21. l2.next = mergeTwoList(l1, l2.next);
  22. return l2;
  23. }
  24. }
  25. }

Test

  1. import static org.junit.Assert.*;
  2. import static com.lun.util.SinglyLinkedList.*;
  3. import org.junit.Test;
  4. import com.lun.util.SinglyLinkedList.ListNode;
  5. public class MergeKSortedListsTest {
  6. @Test
  7. public void test() {
  8. MergeKSortedLists obj = new MergeKSortedLists();
  9. ListNode[] lists1 = { ints2List(1, 4, 5), ints2List(1, 3, 4), ints2List(2, 6)};
  10. ListNode expected1 = ints2List(1, 1, 2, 3, 4, 4, 5, 6);
  11. assertTrue(areTwoListEqual(obj.mergeKLists(lists1), expected1));
  12. ListNode[] list2 = null;
  13. assertNull(obj.mergeKLists(list2));
  14. ListNode[] list3 = { };
  15. assertNull(obj.mergeKLists(list3));
  16. }
  17. }

发表评论

表情:
评论列表 (有 0 条评论,199人围观)

还没有评论,来说两句吧...

相关阅读