|
| 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); |
0 commit comments