tengo el siguiente código. En este caso tengo un Big O(n^2). ¿Cómo puedo escribir este código de una mejor manera usando otra notación Big O? Se supone que el código devuelve True si un valor de la lista coincide con un valor de otro, de lo contrario, debería devolver False.
l1 = [1, 2, 3, 4] l2 = [1, 6, 7, 8] def common_inputs(list1, list2): for i in l1: for j in l2: if i == j: return True else: return False print(common_inputs(l1, l2))Tengo un ejemplo pero está escrito en JavaScript y no puedo entender mucho.
array1 = [1, 2, 3, 4] array2 = [1, 6, 7, 8] function commonInputs(arr1, arr2) { let map = {}; for (let i=0; i < arr1.length; i++) { if (!map[i]) { const item = arr1[i]; map[item] = true; } } for (let j=0; j < arr2.length; j++) { if (map[arr2[j]]) { return true; } } return false; }Cualquier consejo será apreciado. Gracias por adelantado.
El idioma de Python para probar si dos conjuntos se cruzan sería
intersect = not set(a1).isdisjoint(a2)En javascript no existe tal cosa, por lo que tendrá que repetir la segunda lista:
function intersect(a1, a2) { let s1 = new Set(a1) return a2.some(x => s1.has(x)) }Puede usar set para una forma más pitónica.
l1 = [1, 2, 3, 4] l2 = [1, 6, 7, 8] common = set(l1) & set(l2) len(common) > 0 >> True