File tree Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ 풀이 :
3+ 최소힙을 사용해서 풀이한다
4+ 리스트의 각 맨앞 노드를 최소힙에 넣고 최소 값을 가진 노드를 dummy에 붙여나간 뒤 next를 다시 최소힙에 넣는 것을 반복
5+
6+ 노드의 개수 : N, list의 개수 K
7+
8+ TC : O (N log K)
9+ K개의 크기를 가지는 최소 힙에 넣고 제거하는 시간 -> logK * 모든 노드에 대한 순회 N
10+
11+ SC : O (K)
12+ 최소힙 크기는 K에 비례
13+ */
14+
15+ #include < vector>
16+ #include < queue>
17+
18+ using namespace std ;
19+
20+ /* *
21+ * Definition for singly-linked list.
22+ * struct ListNode {
23+ * int val;
24+ * ListNode *next;
25+ * ListNode() : val(0), next(nullptr) {}
26+ * ListNode(int x) : val(x), next(nullptr) {}
27+ * ListNode(int x, ListNode *next) : val(x), next(next) {}
28+ * };
29+ */
30+
31+ struct cmp {
32+ bool operator ()(const ListNode* a, const ListNode* b) {
33+ return a->val > b->val ;
34+ }
35+ };
36+
37+ class Solution {
38+ public:
39+ ListNode* mergeKLists (vector<ListNode*>& lists) {
40+ priority_queue<ListNode*, vector<ListNode*>, cmp> pq;
41+
42+ for (auto list : lists) {
43+ if (list)
44+ pq.push (list);
45+ }
46+
47+ ListNode dummy, *tail = &dummy;
48+
49+ while (!pq.empty ()) {
50+ ListNode* minNode = pq.top (); pq.pop ();
51+
52+ if (minNode->next )
53+ pq.push (minNode->next );
54+
55+ tail->next = minNode;
56+ tail = minNode;
57+ }
58+ return dummy.next ;
59+ }
60+ };
You can’t perform that action at this time.
0 commit comments