LeetCode——Merge k Sorted Lists

题目:

有两个问题

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值