一、分治法
一说起算法对我而言就不由的想起暴力、分治、回溯、动态规划、贪心、深度优先、广度优先等等,不过我一个都不精通。-V-!!。好了不扯了,进入正题,看标题“分治大法好”,为什么这么起嘞,是有原因的。博主今天在刷LeetCode的时候遇到了这么个题,合并K个有序链表,题号是23,我这里给了链接,有兴趣的可以去看看,我今天就来用分治的策略来分析一下这个题目。
接下来就来针对这个题来分析一下。从比较简单的思想来逐渐深入。
二、思路
(1)首先以我的角度第一个想法是先将第一个链表和第二个链表合并,然后再将合并好的链表与第三个链表去合并,依次类推就可将问题解决。但是这么做弊端也很明显就是时间复杂度比较大,假设链表长度都为N,那么时间复杂度应该为O(n!),所以并不是很好的方法。
(2)第二个就是归并的思想,也就是将第一个链表和第二个链表合并,再将第三个链表和第四个链表合并,依次类推,再将和并好的在合并就得到了最终的那个链表。这种时间复杂度相比上一个就要小一部分了。
如图:
(3)第三种就是使用堆这个数据结构,直接对k个链表同时依次向后遍历,那么时间复杂度应该在n(logn)可以说是最理想的一种方法了。
不过博主还未进一步了解这种处理方法,因为能将问题和数据