91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang中怎么合并K個排序鏈表

發布時間:2021-08-12 14:37:11 來源:億速云 閱讀:267 作者:Leah 欄目:大數據

這篇文章給大家介紹golang中怎么合并K個排序鏈表,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

合并 k 個排序鏈表,返回合并后的排序鏈表。請分析和描述算法的復雜度。

示例:

輸入:

[

  1->4->5,

  1->3->4,

  2->6

]

輸出: 1->1->2->3->4->4->5->6

解題思路:

這是一個數組+鏈表組合題目,看到鏈表有序,我們首先想到鏈表合并子問題

1,這是合并兩個有序鏈表的基礎上的擴展

2,簡單思路

將依次將第二個起都合并到第一個,復雜度O(k*n)

3,思路二,兩兩合并,復雜度O(logk*n)

4,注意長度可能是奇數,即使是偶數,兩兩合并后可能是奇數,需要特殊處理,否則數組越界問題很難處理,很容易死循環

5,擴展思路

用優先隊列,每次取最小的元素合并,然后把當前鏈表下一個元素入隊,直到隊列為空

代碼實現

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func mergeKLists(lists []*ListNode) *ListNode {    k:=len(lists)    if k==0{        return nil    }    for k>1{        if k%2==1{                lists[0]=merge(lists[0],lists[k-1])        }        k/=2        for i:=0;i<k;i++{            lists[i]=merge(lists[k+i],lists[i])        }
   }    return lists[0]}
func merge(l1,l2 *ListNode)*ListNode{    h:=&ListNode{}    tmp:=h    for l1!=nil && l2!=nil{        if l1.Val<l2.Val{            tmp.Next=l1            l1=l1.Next        }else{            tmp.Next=l2            l2=l2.Next        }        tmp=tmp.Next    }    if l1!=nil{        tmp.Next=l1    }        if l2!=nil{        tmp.Next=l2    }    return h.Next}

關于golang中怎么合并K個排序鏈表就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀集县| 沈丘县| 蓝田县| 清河县| 赣州市| 随州市| 夏邑县| 郓城县| 霍州市| 嘉峪关市| 广东省| 曲阜市| 永州市| 普兰店市| 平安县| 洛阳市| 潞西市| 枞阳县| 彝良县| 布尔津县| 铜梁县| 湟源县| 娄烦县| 松原市| 克东县| 栾川县| 南京市| 仙居县| 马鞍山市| 闵行区| 邳州市| 二手房| 托克托县| 高清| 仪陇县| 宜城市| 宁德市| 农安县| 金阳县| 庄河市| 台东县|