23 合併K個排序鍊錶

2021-09-24 17:54:38 字數 1146 閱讀 5373

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:輸入:

[1->4->5,

1->3->4,

2->6

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

暴力法:

將所有的節點放在乙個陣列中,然後對陣列排序,最後遍歷陣列,組建新的鍊錶。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

}sort(ans.begin(), ans.end(), cmp); // 對陣列排序

listnode *head = new listnode(0);

listnode *p = head;

for(int i=0; inext = new listnode(0);

p = p->next;

p->val = ans[i]->val;

}p = head->next;

delete head;

return p;

}static bool cmp(listnode *a, listnode* b)

};

第1個鍊錶和第2個鍊錶合併,然後合成的新的鍊錶再和第3個鍊錶合併,依次類推......

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

else

}if(head1)

p->next = head1;

if(head2)

p->next = head2;

head1 = node->next;

delete node;

return head1;

}};

leetcode題解

23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 偷懶直接複製了以前的堆的 所有看上去長了點 class priorityqueue priority是設定優先順序 true為大根堆 false為...

23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。採用分治法的思想,將 k 個排序鍊錶先合併為 k 2 個鍊錶。依次迴圈,直至合併為1個鍊錶為止。注意 從 k 到 k 2 時,如何定義索引,將每兩個鍊錶合併,而且必須符合奇數 偶數個鍊錶的情況。解決辦法 k n 1 2 list...

23 合併K個排序鍊錶

題目.很有意思 第一想法就是使用最小堆或者比較樹,這個方法當然是可以的,但是用go語言難寫,尤其是比較樹。採用歸併排序的思想倒是很快,每次比較都需要比較o n 次,一共log2k次 package main import fmt type listnode struct func printlist...