茄子算法每日N題之LeetCode23.合併K個排序鏈表

LeetCode 23.合併K個排序鏈表

你們好,我是靈魂畫師--茄子。技術水平通常,喜歡畫畫。算法

開始今天的正題。數組

23.合併K個排序鏈表指針

合併 k 個排序鏈表,返回合併後的排序鏈表。請分析和描述算法的複雜度。code

示例 1:排序

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

解法:get

1.雙指針解法

思路:io

  1. 遍歷數組,合併兩個成新的一個鏈表再繼續合併下一個鏈表
let mergeKLists = function(lists) {
    let mergeTwoLists = (l1,l2) => {
        let preHead = new ListNode(-1)
        let preNode = preHead
        while(l1 && l2){
            if(l1.val <= l2.val){
                preNode.next = l1
                l1 = l1.next
            }else{
                preNode.next = l2
                l2 = l2.next
            }
            preNode = preNode.next
        }
        preNode.next = l1 ? l1 : l2
        return preHead.next
    }
    let n = lists.length
    if(n == 0) return null
    let res = lists[0]
    for(let i = 1;i < n;i++){
        if(lists[i]){
            res = mergeTwoLists(res,lists[i])
        }
    }
    return res
};

結合個人分析你是否是對這道題有了更清晰的認識了呢?function

以上就是個人思路以及解法了,但願你們喜歡我,我會繼續努力的ヾ(◍°∇°◍)ノ゙。(點個贊把我帶走吧~~)class

相關文章
相關標籤/搜索