Si sus listas solamente contiene números enteros de un tamaño limitado, también hay una solución en O (n):
1.) crear una matriz de valores booleanos del tamaño de y El valor entero más grande más 1 en sus listas originales (p. en tu ejemplo '9 + 1'); establecer todos los campos a falso;
let m = Array.create 10 false
->[|false; false; false; false; false; false; false; false; false; false|]
2.) iterar sobre la primera lista: Para cada elemento se encuentra con, establezca el valor booleano con el respectivo desplazamiento a 'verdadero'; en su ejemplo este cedería
List.iter (fun x -> m.(x) <- true) e1
->[|false; false; false; true; true; true; true; true; false; false|]
3.) de filtro sobre la segunda lista, manteniendo sólo los elementos de los cuales el campo correspondiente en la matriz es cierto
List.filter (fun x -> m.(x) = true) e2
->[3; 5; 7]
OCaml tenemos conjunto de oper ation: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.S.html Tenga en cuenta que la solución bot es equivalente en términos de complejidad (con el conjunto ocaml). –