当前位置: 首页 > article >正文

【hot100】刷题记录(52)-合并K个升序链表

题目描述:

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

 

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

 

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

 

我的作答:

就是全部转换为数组,数组排序后再新建一个链表,听着很繁琐,空间复杂度也高但是很简单。。

# 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]:
        if not lists: return None
        nums = []
        for i in range(len(lists)): #把链表元素全部提取出来变成数组
            cur = lists[i]
            while cur:
                nums.append(cur.val)
                cur = cur.next
        nums.sort() #给数组排序
        if not nums: return None
        head = ListNode(nums[0])
        if len(nums)==1: return head
        node = ListNode()
        head.next = node
        for i in range(1, len(nums)): #新建一个链表,把数组元素挨个转换过去
            node.val = nums[i]
            if i<len(nums)-1:
                next_node = ListNode()
                node.next = next_node
                node = next_node
        return head

 

参考:

使用堆的方法

# 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]:
        h = [(lists[i].val, i, lists[i]) for i in range(len(lists)) if lists[i]]
        heapify(h)
        dummy = ListNode(-1, None)
        cur = dummy
        while h:
            _, i, node = heappop(h)
            cur.next = node
            if node.next:
                heappush(h, (node.next.val, i, node.next))
            cur = cur.next
        return dummy.next

 


http://www.kler.cn/a/611374.html

相关文章:

  • How to share files with Linux mint 22 via samba in Windows
  • 【深度破解】爬虫反反爬核心技术实践:验证码识别与指纹伪装
  • 单表、多表查询练习
  • 一种电子发票数据的模糊查询方法
  • HTTP Header 中的 cookie 和 set-cookie
  • git 基本操作命令
  • 《深度剖析:鸿蒙系统不同终端设备的UI自适应布局策略》
  • Android第七次面试总结(Java和kotlin源码级区别 )
  • docker中yum出错解决方案
  • AP 场景架构设计(一) :OceanBase 读写分离策略解析
  • Temu本地化运营如何重构乌兹别克斯坦电商格局
  • 使用 Spring Security的一些常用功能
  • 2025年渗透测试面试题总结-某shopee -红队-Singapore(题目+回答)
  • 如何在 Postman 中发送 PUT 请求?
  • 茱元游戏TV2.9.3 | 适配多设备的经典街机游戏集合
  • ASP 应用HTTP.SYS短文件文件解析Access 注入数据库泄漏
  • 【MySQL数据库】视图 + 三范式
  • wpf 后台使用图标字体
  • 【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码
  • 基于 Python 的自然语言处理系列(61):RAG Fusion介绍