23. Merge k Sorted Lists 合并 K 個(gè)有序列表

題目鏈接
tag:

  • Hard;
  • Divide and Conquer;

question
??Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Example:

Input:
[
1->4->5,
1->3->4,
2->6
]
Output: 1->1->2->3->4->4->5->6

思路:
??這道題讓我們合并k個(gè)有序鏈表,最終合并出來的結(jié)果也必須是有序的胆绊,之前有道 Merge Two Sorted Lists氨鹏,是混合插入兩個(gè)有序鏈表。這道題增加了難度压状,變成合并k個(gè)有序鏈表了仆抵,但是不管合并幾個(gè),基本還是要兩兩合并种冬。那么我們首先考慮的方法是能不能利用之前那道題的解法來解答此題镣丑。答案是肯定的,但是需要修改娱两,怎么修改呢莺匠,最先想到的就是兩兩合并,就是前兩個(gè)先合并十兢,合并好了再跟第三個(gè)趣竣,然后第四個(gè)直到第k個(gè)。這樣的思路是對(duì)的旱物,但是效率不高遥缕,沒法通過OJ,所以我們只能換一種思路宵呛,這里就需要用到分治法 Divide and Conquer Approach单匣。簡(jiǎn)單來說就是不停的對(duì)半劃分,比如k個(gè)鏈表先劃分為合并兩個(gè)k/2個(gè)鏈表的任務(wù),再不停的往下劃分户秤,直到劃分成只有一個(gè)或兩個(gè)鏈表的任務(wù)码秉,開始合并。舉個(gè)例子來說比如合并6個(gè)鏈表鸡号,那么按照分治法转砖,我們首先分別合并0和3,1和4鲸伴,2和5堪藐。這樣下一次只需合并3個(gè)鏈表,我們?cè)俸喜?和3挑围,最后和2合并就可以了。代碼中的k是通過 (n+1)/2 計(jì)算的糖荒,這里為啥要加1呢杉辙,這是為了當(dāng)n為奇數(shù)的時(shí)候,k能始終從后半段開始捶朵,比如當(dāng)n=5時(shí)蜘矢,那么此時(shí)k=3,則0和3合并综看,1和4合并品腹,最中間的2空出來。當(dāng)n是偶數(shù)的時(shí)候红碑,加1也不會(huì)有影響舞吭,比如當(dāng)n=4時(shí),此時(shí)k=2析珊,那么0和2合并羡鸥,1和3合并,完美解決問題忠寻,參見代碼如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if (lists.empty()) return NULL;
        int n = lists.size();
        while (n > 1) {
            int k = (n + 1) / 2;
            for (int i=0; i<n/2; ++i)
                lists[i] = mergeTwoLists(lists[i], lists[i+k]);
            n = k;
        }
        return lists[0];
    }

    // 合并兩個(gè)鏈表
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode *dummy = new ListNode(-1), *cur = dummy;
        while (l1 && l2) {
            if (l1->val < l2->val) {
                cur->next = l1;
                l1 = l1->next;
            }
            else {
                cur->next = l2;
                l2 = l2->next;
            }
            cur = cur->next;
        }
        if (l1) cur->next = l1;
        if (l2) cur->next = l2;
        return dummy->next;
    }
};

相似題目:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惧浴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奕剃,更是在濱河造成了極大的恐慌衷旅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纵朋,死亡現(xiàn)場(chǎng)離奇詭異柿顶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)倡蝙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門九串,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事猪钮∑飞剑” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵烤低,是天一觀的道長(zhǎng)肘交。 經(jīng)常有香客問我,道長(zhǎng)扑馁,這世上最難降的妖魔是什么涯呻? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮腻要,結(jié)果婚禮上复罐,老公的妹妹穿的比我還像新娘。我一直安慰自己雄家,他們只是感情好效诅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趟济,像睡著了一般乱投。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顷编,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天戚炫,我揣著相機(jī)與錄音,去河邊找鬼媳纬。 笑死双肤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钮惠。 我是一名探鬼主播杨伙,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼萌腿!你這毒婦竟也來了限匣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤毁菱,失蹤者是張志新(化名)和其女友劉穎米死,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贮庞,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峦筒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窗慎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片物喷。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卤材,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峦失,到底是詐尸還是另有隱情扇丛,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布尉辑,位于F島的核電站帆精,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隧魄。R本人自食惡果不足惜卓练,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望购啄。 院中可真熱鬧襟企,春花似錦、人聲如沸狮含。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辉川。三九已至,卻和暖如春拴测,著一層夾襖步出監(jiān)牢的瞬間乓旗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工集索, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屿愚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓务荆,卻偏偏與公主長(zhǎng)得像妆距,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子函匕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 睡意朦朧娱据,眼皮惺忪,很想睡盅惜,這一天過得沒什么波瀾中剩,想起明天要上班也沒什么不爽,只是生存的問題再次困擾了我抒寂,窮鬼又找...
    思倍思閱讀 133評(píng)論 0 0
  • 那一朵朵云的白结啼, 即是我在藍(lán)天上寫下的詩(shī)句, 訴說了對(duì)你的情懷屈芜, 飄飄然郊愧, 飄飄然朴译, 送到你的面前。 輕輕浮動(dòng)你的...
    等待昇華閱讀 196評(píng)論 0 0
  • 文:通靈半藏 最近澜公,我很有時(shí)間和精力在公眾號(hào)上搞圖文,于是都很簡(jiǎn)略地發(fā)了一點(diǎn)文字和圖片喇肋。大家可能看不出有什么意義坟乾。...
    通靈半藏閱讀 451評(píng)論 0 0
  • 何甲榮畫怎樣
    鄧燈光閱讀 117評(píng)論 0 0