Проблема , указанная в LeetCode, выглядит следующим образом:
Объединяет k отсортированных связанных списков и возвращает их как один отсортированный список.Проанализируйте и опишите его сложность.
Пример:
Ввод: [1-> 4-> 5, 1-> 3-> 4, 2-> 6] Выход: 1-> 1-> 2-> 3-> 4-> 4-> 5-> 6
Я могу пройти 129 из 131 тестовых случаев, но в случае 130 нажать «превышено ограничение по времени». Нижеэто моя реализация.
Может ли кто-нибудь определить узкое место?Любые предложения по улучшению сложности времени?
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# def print_lists(self, lists):
# idx = 0
# while idx < len(lists):
# ptr = lists[idx]
# _l = []
# while ptr is not None:
# _l.append(ptr.val)
# ptr = ptr.next
# idx += 1
# print(_l)
def min_idx(self, lists):
idx = 0
for i in range(len(lists)):
if lists[i] is None:
continue
elif lists[idx] is None:
idx = i
elif lists[i].val < lists[idx].val:
idx = i
return idx
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
head = tail = ListNode(-1)
while len(lists) > 0:
m_idx = self.min_idx(lists)
if lists[m_idx] is None:
return head.next
tail.next = lists[m_idx]
tail = tail.next
lists[m_idx] = lists[m_idx].next
if lists[m_idx] is None:
del lists[m_idx]
return head.next
Я столкнулся с проблемой "превышено ограничение по времени" в нашей без использования del
.Контрольный пример 130 содержит 10 000 списков ссылок.