资讯专栏INFORMATION COLUMN

23. Merge k Sorted Lists

qingshanli1988 / 2455人阅读

摘要:题目合并排序链表并返回一个排序列表。分析和描述它的复杂性。直接对个链表合并,找到个链表头最小的,将值追加到放在新创建的链表中,并把头移到下一个节点,直到所有的链表头运行后发现超时尝试两两合并两个链表,知道最终合并成一个运行通过

题目

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
合并k排序链表并返回一个排序列表。分析和描述它的复杂性。

直接对k个链表合并,找到k个链表头最小的,将值追加到放在新创建的链表中,并把头移到下一个节点,直到所有的链表头none

</>复制代码

  1. # Definition for singly-linked list.
  2. class ListNode(object):
  3. def __init__(self, x):
  4. self.val = x
  5. self.next = None
  6. class Solution(object):
  7. def mergeKLists(self, lists):
  8. """
  9. :type lists: List[ListNode]
  10. :rtype: ListNode
  11. """
  12. head = None
  13. walk_list = [lists[i] for i in range(len(lists))]
  14. pre = None
  15. while len(filter(lambda x: x is not None, walk_list)):
  16. for i in range(len(walk_list)):
  17. if walk_list[i] is not None:
  18. min_val = walk_list[i].val
  19. min_index = i
  20. break
  21. for i in range(len(walk_list)):
  22. if walk_list[i] and walk_list[i].val < min_val:
  23. min_val = walk_list[i].val
  24. min_index = i
  25. l = ListNode(min_val)
  26. walk_list[min_index] = walk_list[min_index].next
  27. if head is None:
  28. head = l
  29. pre = head
  30. else:
  31. pre.next = l
  32. pre = l
  33. return head

运行后发现超时

尝试两两合并两个链表,知道最终合并成一个

</>复制代码

  1. class Solution(object):
  2. def mergeKLists(self, lists):
  3. """
  4. :type lists: List[ListNode]
  5. :rtype: ListNode
  6. """
  7. if not lists:
  8. return None
  9. i = 0
  10. j = len(lists) - 1
  11. r_list = lists
  12. while i < j:
  13. l = []
  14. while i < j:
  15. node = self.mergetwolists(r_list[i], r_list[j])
  16. l.append(node)
  17. i += 1
  18. j -= 1
  19. if i == j:
  20. l.append(r_list[i])
  21. r_list = l
  22. i = 0
  23. j = len(r_list) - 1
  24. return r_list[0]
  25. def mergetwolists(self, l1, l2):
  26. if l1 == None:
  27. return l2
  28. if l2 == None:
  29. return l1
  30. l1_head = l1
  31. l2_head = l2
  32. head = None
  33. pre = None
  34. while l1_head and l2_head:
  35. if l1_head.val < l2_head.val:
  36. l = ListNode(l1_head.val)
  37. l1_head = l1_head.next
  38. else:
  39. l = ListNode(l2_head.val)
  40. l2_head = l2_head.next
  41. if pre == None:
  42. pre = l
  43. head = l
  44. else:
  45. pre.next = l
  46. pre = l
  47. if l1_head is None:
  48. pre.next = l2_head
  49. if l2_head is None:
  50. pre.next = l1_head
  51. return head

运行通过

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40724.html

相关文章

  • [LeetCode] 23. Merge k Sorted Lists

    摘要:思路这题中的中,个还有其中个别的等于的情况,所以要判断一下再加入代码 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Heap Time Complexity: Update the heap costs O(nklogk) Space ...

    Codeing_ls 评论0 收藏0
  • 355. Design Twitter , 用23. Merge k Sorted Lists和OO

    摘要:的想法就是用每次得到最小的链表头的值,输出。每个都有一个关注人列表,用储存。用户可以发消息,关注别人,取消关注别人。可以系统得到关注人的消息合集,这个方法必须在这个层级。因为用户只知道自己的信息。 Merge k Sorted Lists /** * Definition for singly-linked list. * public class ListNode { * ...

    1fe1se 评论0 收藏0
  • LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K S

    摘要:分治算法递归每层操作分解将原问题分解成一系列的子问题。分治算法满足的条件可分解原问题与分解成的小问题具有相同的模式无关联原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别。 Time:2019/4/10Title: Merge K Sorted ListsDifficulty: DifficultyAuthor: 小鹿 题目:Merge K...

    zhou_you 评论0 收藏0
  • [Leetcode] Merge Two Sorted Lists Merge K Sorted L

    摘要:注意因为堆中是链表节点,我们在初始化堆时还要新建一个的类。代码初始化大小为的堆拿出堆顶元素将堆顶元素的下一个加入堆中 Merge Two Sorted Lists 最新更新请见:https://yanjia.me/zh/2019/01/... Merge two sorted linked lists and return it as a new list. The new list...

    stefanieliang 评论0 收藏0
  • [LintCode] Merge K Sorted Lists [DC/Heap]

    摘要:分治做法中,函数依然是将链表结点两两进行比较,然后在函数中迭代两个二分后的结果。 Problem Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example Given lists: [ 2->4->null, null, ...

    happyhuangjinjin 评论0 收藏0

发表评论

0条评论

qingshanli1988

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<