Merge de intervalos que se solapan o se tocan; sin mutar el input. Ej: [[1,4],[4,5]] → [[1,5]]
def merge_intervals(intervals):
if not intervals: return []
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for cur in intervals[1:]:
last = merged[-1]
if cur[0] < last[1]: # <-- revisar
last[1] = max(last[1], cur[1])
else:
merged.append(cur)
return merged
< vs <=) + mutación del input.| Caso | Resultado |
|---|---|
| [[1,3],[2,6],[8,10],[15,18]] | PASS |
| [[1,4],[4,5]] (se tocan) | FAIL — devuelve [[1,4],[4,5]], esperado [[1,5]] |
| [] vacío | PASS |
| [[1,4],[2,3]] anidado | PASS |
| [[1,2],[3,4]] disjunto | PASS |
4/5 tests. 🔎 Además, los revisores cazaron un bug de mutación del input que un test naive NO exponía — valor real del panel multi-agente.
INCORRECT · Confianza: ALTA (3/3 unánime) · Score consenso: 1.7 / 5
2 bugs críticos: (1) intervalos que se tocan no se fusionan; (2) muta la lista del cliente.
def merge_intervals(intervals):
if not intervals: return []
ordered = sorted(intervals, key=lambda x: x[0]) # no muta
merged = [list(ordered[0])] # copia
for cur in ordered[1:]:
last = merged[-1]
if cur[0] <= last[1]: # fusiona tocados
last[1] = max(last[1], cur[1])
else:
merged.append(list(cur))
return merged