Skip to content

Commit a78b234

Browse files
authored
[ PS ] : Merge k Sorted Lists
1 parent 1d28bdd commit a78b234

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

โ€Žmerge-k-sorted-lists/uraflower.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val, next) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.next = (next===undefined ? null : next)
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode[]} lists
10+
* @return {ListNode}
11+
*/
12+
const mergeKLists = function (lists) {
13+
// ๊ฐ ๋…ธ๋“œ์˜ val ๋ณ„ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ์ฒด๋กœ ๋‚˜ํƒ€๋ƒ„
14+
const counter = {};
15+
16+
for (let list of lists) {
17+
let node = list;
18+
while (node) {
19+
counter[node.val] = (counter[node.val] || 0) + 1;
20+
node = node.next;
21+
}
22+
}
23+
24+
// ์œ„์—์„œ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ node์™€ list๋ฅผ ์ƒ์„ฑ
25+
let head = new ListNode();
26+
let current = head;
27+
const entries = Object.entries(counter).sort(([val1], [val2]) => Number(val1) - Number(val2)); // val ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
28+
29+
for (let i = 0; i < entries.length; i++) {
30+
const [val, count] = entries[i];
31+
32+
for (let j = 0; j < count; j++) {
33+
const node = new ListNode(Number(val));
34+
current.next = node;
35+
current = current.next;
36+
}
37+
}
38+
39+
return head.next;
40+
};
41+
42+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n * log n) (sort์—์„œ n * log n, ์ˆœํšŒ์™€ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ์—์„œ๋Š” n)
43+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
44+
45+
// ์ตœ์†Œํž™์„ ํ†ตํ•ด ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ

0 commit comments

Comments
ย (0)