Skip to content

Commit 8de48f2

Browse files
committed
feat(js): add modular solution and documentation for normal challenge 5 - BFS and DFS Graph Traversal
1 parent a88702e commit 8de48f2

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Challenge Description and Solution
2+
3+
## English Version
4+
5+
### Challenge Description
6+
Given a list of intervals (e.g., [[1, 3], [2, 6], [8, 10]]), implement a function that merges all overlapping intervals and returns an array with the resulting intervals.
7+
8+
### Code Explanation
9+
The solution first sorts the intervals based on their start times. It then iterates through the sorted intervals, merging overlapping intervals by comparing the current interval's start with the last merged interval's end.
10+
11+
### Relevant Code Snippet
12+
13+
```javascript
14+
function mergeIntervals(intervals) {
15+
if (!intervals || intervals.length === 0) {
16+
return [];
17+
}
18+
19+
// Sort intervals based on the start time
20+
intervals.sort((a, b) => a[0] - b[0]);
21+
const merged = [intervals[0]];
22+
23+
for (let i = 1; i < intervals.length; i++) {
24+
const current = intervals[i];
25+
const last = merged[merged.length - 1];
26+
27+
if (current[0] <= last[1]) { // Overlapping intervals
28+
merged[merged.length - 1] = [last[0], Math.max(last[1], current[1])];
29+
} else {
30+
merged.push(current);
31+
}
32+
}
33+
34+
return merged;
35+
}
36+
```
37+
38+
### Example Usage
39+
40+
```javascript
41+
import mergeIntervals from './intervals.js';
42+
43+
const intervals = [[1, 3], [2, 6], [8, 10], [15, 18]];
44+
const merged = mergeIntervals(intervals);
45+
console.log('Merged intervals:', merged);
46+
```
47+
48+
---
49+
50+
## Versión en Español
51+
52+
### Descripción del Reto
53+
Dada una lista de intervalos (por ejemplo, [[1, 3], [2, 6], [8, 10]]), implementa una función que fusione todos los intervalos que se solapan y devuelva un arreglo con los intervalos resultantes.
54+
55+
### Explicación del Código
56+
La solución primero ordena los intervalos según sus tiempos de inicio. Luego itera a través de los intervalos ordenados, fusionando los que se solapan comparando el inicio del intervalo actual con el final del último intervalo fusionado.
57+
58+
### Fragmento de Código Relevante
59+
60+
```javascript
61+
function mergeIntervals(intervals) {
62+
if (!intervals || intervals.length === 0) {
63+
return [];
64+
}
65+
66+
// Ordenar intervalos según el tiempo de inicio
67+
intervals.sort((a, b) => a[0] - b[0]);
68+
const merged = [intervals[0]];
69+
70+
for (let i = 1; i < intervals.length; i++) {
71+
const current = intervals[i];
72+
const last = merged[merged.length - 1];
73+
74+
if (current[0] <= last[1]) { // Intervalos que se solapan
75+
merged[merged.length - 1] = [last[0], Math.max(last[1], current[1])];
76+
} else {
77+
merged.push(current);
78+
}
79+
}
80+
81+
return merged;
82+
}
83+
```
84+
85+
### Ejemplo de Uso
86+
87+
```javascript
88+
import mergeIntervals from './intervals.js';
89+
90+
const intervals = [[1, 3], [2, 6], [8, 10], [15, 18]];
91+
const merged = mergeIntervals(intervals);
92+
console.log('Intervalos fusionados:', merged);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// intervals.js - Merge overlapping intervals
2+
3+
function mergeIntervals(intervals) {
4+
if (!intervals || intervals.length === 0) {
5+
return [];
6+
}
7+
8+
// Sort intervals based on the start time
9+
intervals.sort((a, b) => a[0] - b[0]);
10+
const merged = [intervals[0]];
11+
12+
for (let i = 1; i < intervals.length; i++) {
13+
const current = intervals[i];
14+
const last = merged[merged.length - 1];
15+
16+
if (current[0] <= last[1]) { // Overlapping intervals
17+
merged[merged.length - 1] = [last[0], Math.max(last[1], current[1])];
18+
} else {
19+
merged.push(current);
20+
}
21+
}
22+
23+
return merged;
24+
}
25+
26+
export default mergeIntervals;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// main.js - Example usage of mergeIntervals function
2+
3+
import mergeIntervals from './intervals.js';
4+
5+
/*
6+
Challenge: Given a list of intervals (e.g., [[1, 3], [2, 6], [8, 10]]), implement a function that merges all overlapping intervals and returns an array with the resulting intervals.
7+
*/
8+
9+
function main() {
10+
const intervals = [[1, 3], [2, 6], [8, 10], [15, 18]];
11+
const merged = mergeIntervals(intervals);
12+
console.log('Merged intervals:', merged);
13+
}
14+
15+
main();

0 commit comments

Comments
 (0)