美文网首页Swift - LeetCode程序员Swift in LeetCode
Swift - LeetCode - 合并K个排序链表

Swift - LeetCode - 合并K个排序链表

作者: 依赖糊涂 | 来源:发表于2019-03-01 10:29 被阅读3次

    题目

    合并K个排序链表

    问题:

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

    解题思路:

    这里就需要用到分治法 。简单来说就是不停的对半划分,比如k个链表先划分为合并两个k/2个链表的任务,再不停的往下划分,直到划分成只有一个或两个链表的任务,开始合并。举个例子来说比如合并6个链表,那么按照分治法,我们首先分别合并1和4,2和5,3和6。这样下一次只需合并3个链表,我们再合并1和3,最后和2合并就可以了。

    示例:

    输入:
         [
         1->4->5,
         1->3->4,
         2->6
         ]
    输出: 1->1->2->3->4->4->5->6
    
    代码:
    /**
    public class SingNode {
        public var value : Int
        public var nextNode: SingNode?
        
        public init(value:Int) {
            self.value = value
        }
    }
     **/
    func merchageTotalList(_ list : [SingNode?]) -> SingNode? {
            guard list.count > 0 else {
                return nil
            }
            
            var left = 0
            var right = list.count - 1
            var lists = list
            
            while right > 0 {
                left = 0
                while left < right {
                    lists[left] = merchgeTwoList(lists[left], lists[right])
                    left = left + 1
                    right = right - 1
                }
            }
            return lists[0]
        }
    
    func merchgeTwoList(_ l1:SingNode?, _  l2:SingNode?) -> SingNode? {
            if l1 == nil {
                return l2
            }
            
            if l2 == nil {
                return l1
            }
            
            let dummy = SingNode.init(value: 0)
            var tempNode = dummy
            
            var L1 = l1
            var L2 = l2
            
            while L1 != nil && L2 != nil {
                if L1!.value < L2!.value {
                    tempNode.nextNode = L1
                    L1 = L1?.nextNode
                } else {
                    tempNode.nextNode = L2
                    L2 = L2?.nextNode
                }
                tempNode = tempNode.nextNode!
            }
            
            tempNode.nextNode = L1 ?? L2
            return dummy.nextNode
        }
        
    

    相关文章

      网友评论

        本文标题:Swift - LeetCode - 合并K个排序链表

        本文链接:https://www.haomeiwen.com/subject/wsiruqtx.html