题目:
有两个问题
(1)在迭代访问数组时pop数据造成访问越界
print结果
大概就是,我数据pop出去1个,整体长度少了1个,访问时应该从i-num(num表示pop出去数据数量)进行,代码修改为如下:
结果正确
(2)关于执行时间过长问题
无语,他给的lists中n个单元全是1个ListNode,按下面代码写的话时间复杂度n*n
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
num = 0
for i in range(len(lists)):
if(lists[i - num] == None):
lists.pop(i - num)
num += 1
if(lists == []):
return None
else:
head = lists[0]
num = 0
for i in range(1,len(lists)):
if(lists[i]):
if(head.val > lists[i].val):
head = lists[i]
num = i
lists[num] = lists[num].next
if(lists[num] == None):
lists.pop(num)
head.next = None
now = head
while(lists):
now.next = lists[0]
num = 0
for i in range(1, len(lists)):
if(lists[i]):
if(now.next.val > lists[i].val):
now.next = lists[i]
num = i
lists[num] = lists[num].next
if(lists[num] == None):
lists.pop(num)
now = now.next
now.next = None
return head
下面准备把所有的直接拼在一块,再排序。但是链表的好像没有什么特别快的排序方法?(学的太久忘了)或者直接塞到列表中排序处理
后续继续......
后续采用方法确实是直接拼在一块,放数组,直接排序再放回来,起码不会超时
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
all_lists = []
for i in lists:
while(i):
all_lists.append(i.val)
i = i.next
if(all_lists == []):
return None
else:
all_lists = sorted(all_lists)
head = ListNode(val=all_lists[0])
now = head
for i in range(1,len(all_lists)):
now.next = ListNode(val=all_lists[i])
now = now.next
return head