-
Notifications
You must be signed in to change notification settings - Fork 125
/
Copy pathJeehay28.js
72 lines (65 loc) Β· 5 KB
/
Jeehay28.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Brute Force (Array Sorting) - Good for smaller cases
// π Time Complexity: O(N log N), where N is the total number of nodes
// ποΈ Space Complexity: O(N)
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
var mergeKLists = function (lists) {
const nums = [];
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// β Step 1: Extract values from all linked lists β
// β We traverse each linked list and push node values into 'nums'. β
// β This flattens the K lists into a single array. β
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
for (let list of lists) {
while (list) {
nums.push(list.val);
list = list.next;
}
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// β Step 2: Sort the values β
// β JavaScript's default sort is lexicographical, so we use a custom β
// β comparator to sort numbers correctly in ascending order. β
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
nums.sort((a, b) => a - b);
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// β Step 3: Create a new sorted linked list β
// β Initialize a dummy node, then iterate through the sorted array. β
// β For each value, create a new ListNode and append it to the list. β
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
let dummy = new ListNode(-1);
let current = dummy;
for (num of nums) {
current.next = new ListNode(num);
current = current.next;
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// β Step 4: Return the merged list β
// β We return dummy.next since dummy is a placeholder. β
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
return dummy.next;
};
/**
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
* β Time & Space Complexity β
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
* β Operation β Complexity β
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
* β Extracting values β O(N) - N is the total number of nodes β
* β Sorting values β O(N log N) - JavaScript's sort uses Timsort β
* β Building linked list β O(N) - Iterates through sorted array β
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
* β Overall Time Complexity β O(N log N) β
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
* β Space Complexity β O(N) - Storing all node values in array β
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
*/