首页 > 其他分享 >合并K个排序链表

合并K个排序链表

时间:2023-09-27 09:47:56浏览次数:42  
标签:node ListNode val list 合并 next 链表 heap 排序

合并K个排序链表

描述

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

题解

使用heapq,但是ListNode没有比较函数,所以需要自行定义:
ListNode.__lt__ = lambda x, y: x.val < y.val

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

ListNode.__lt__ = lambda x, y: x.val < y.val

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        heap = []
        for each_list in lists:
            if each_list:
                heapq.heappush(heap, each_list)

        header = curr = ListNode(0)

        while heap:
            node = heapq.heappop(heap)
            curr.next = ListNode(node.val)
            curr = curr.next
            node = node.next
            if node:
                heapq.heappush(heap, node)

        return header.next

题解2

不定义ListNode.__lt__,在heappush的时候第一个为node.val,当val相等时,需要提供一个可比较的值,否则ListNode不可比较会报错,在此第二个数设置id,或者其他编号也可以

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        heap = []
        for each_list in lists:
            if each_list:
                heapq.heappush(heap, (each_list.val, id(each_list), each_list))

        header = curr = ListNode(0)

        while heap:
            val, id_list, node = heapq.heappop(heap)
            curr.next = ListNode(val)
            curr = curr.next
            node = node.next
            if node:
                heapq.heappush(heap, (node.val, id_list, node))

        return header.next

标签:node,ListNode,val,list,合并,next,链表,heap,排序
From: https://www.cnblogs.com/init0ne/p/14638344.html

相关文章

  • Linux下使用lvm将多块盘合并
    需求:将vdbvdc这两个500G的盘合并成一个1000G的盘,然后新建一个目录挂载到大盘上,当大盘出现磁盘紧张的时候还可以自动扩容.由于部门里有基础服务的同事,很少有机会直接接触lvm,刚好最近有几台物理服务器,借这个机会,就尝试自己实践了一番lsblk12345678#使用lsblk查看当前......
  • 在excel表格插入标黄的这列数据 实现合并单元格,并统计单元格个数?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。下图是他的原始数据和他想得到的目标数据,如下所示:需要在标黄的两行里边进行相关操作。二、实现过程这里【瑜亮老师】给了一个思路,groupby系统.漏洞......
  • # yyds干货盘点 # 在excel表格插入标黄的这列数据 实现合并单元格,并统计单元格个数?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。下图是他的原始数据和他想得到的目标数据,如下所示:需要在标黄的两行里边进行相关操作。二、实现过程这里【瑜亮老师】给了一个思路,groupby系统.漏洞数.sum,不......
  • Linux的双链表复习—Apple的学习笔记
    一,前言   今天想把linux的双链表base代码拿来单片机用,于是看了下,结果有点混乱了。那么就画了个链表变化图,且做了实验进行巩固。二,分析链表头插方法主要是root然后添加t1,然后添加t2。那么链表的变化是RootRoot->t1Root->t2->t1如下图,R代表root头节点,1代表t1节点,2代表t2节点。......
  • drf(过滤、排序、异常)
    一.过滤组件1内置过滤组件SearchFilter#缺点:外键字段的搜索操作将会抛出异常:RelatedFieldgotinvalidlookup:icontains#1)在视图文件views.py中导入drf的搜索组件fromrest_framework.filtersimportSearchFilter#2)将搜索组件配置给群查接口视图类的filter_b......
  • 数据库中order by 依照指定顺序排序如何操作
    SQL学习之使用orderby依照指定顺序排序或自己定义顺序排序 我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常sql须要实现方式都有哪些,參考很多其它资料总结例如以下:一、假设我们仅仅是对于在某个程序中的应用是须要依照例如以下的方......
  • 合并两个无序数组
    合并两个无序数组现在我有两个无序的数组(长度不相等),我现在想将两个数组合并#include<iostream>#include<vector>usingnamespacestd;vector<int>mergeArrays(vector<int>&arr1,vector<int>&arr2){vector<int>res;inti=0,j=0;//设置......
  • EasyExcel合并单元格
    普通不合并单元格publicstaticvoidwriteExcel(){//写excel的路径,当前项目路径下StringfileName=getPath();//构建ExcelWriterExcelWriterexcelWriter=EasyExcel.write(fileName).excelType(ExcelTypeEnum.XLSX).build();//构建sheet......
  • 排序
    排序算法哪些是稳定的排序算法,哪些是不稳定的稳定的:直接插入排序:最坏情况是逆序,时间复杂度是O(N2),最好情况是插入的都是顺序,时间复杂度O(N),空间复杂度O(1)冒泡排序:时间复杂度O(N2),空间复杂度O(1)计数排序:时间复杂度O(N+Range),空间复杂度O(range)不稳定:希尔排序:时间复杂度O(N......
  • 如何实现一个数组按照另外一个数组的顺序进行排序?
    数组arr1按照arr2的顺序展示,如何实现:一、简单类型数组letarr1=[1,2,3,4,5] letarr2=[5,3,2,4,1]arr1.sort((prev,next)=>{ returnarr2.indexOf(prev)-arr2.indexOf(next)})console.log(arr1)//[5,3,2,4,1]二、复杂类型数组letarr1=[{......