¿Qué devuelve esta función y cuáles son sus costes de tiempo y espacio?
def f(nums):
seen = set()
for n in nums:
if n in seen:
return n
seen.add(n)
return -1Opciones
- El valor menor; O(n log n) de tiempo, O(1) de espacio
- El primer valor duplicado; O(n) de tiempo, O(n) de espacio (Opción correcta)
- El número de duplicados; O(n²) de tiempo, O(1) de espacio
- El último valor único; O(n) de tiempo, O(1) de espacio
Respuesta
El primer valor duplicado; O(n) de tiempo, O(n) de espacio
Por qué
Recorre la lista una vez y recuerda cada número en un set. El primer número que ya está en el set es el primer valor repetido, así que lo devuelve.
Un bucle, con comprobaciones en O(1) dentro: O(n) de tiempo. El set puede crecer hasta n elementos: O(n) de memoria extra.
Sin el set compararías cada pareja: O(n²).
Recuerda
Un set convierte '¿ya lo vi?' en O(1).