Dada una lista enlazada de enteros en orden aleatorio, divídala en dos nuevas listas enlazadas de modo que la diferencia en la suma de elementos de cada lista sea máxima y la la longitud de las listas difiere en no más de 1 (en el caso de que la lista original tenga un número impar de elementos). No puedo suponer que los números en la lista sean únicos.dividir una lista enlazada en 2 listas pares que contienen los números más pequeños
El algoritmo que pensé fue hacer una especie de mezcla en la lista enlazada originales (O (N & middot; log n) tiempo, O (n) espacio) y luego usar una función recursiva para caminar hasta al final de la lista para determinar su longitud, haciendo la división mientras la función recursiva se está desenrollando. La función recursiva es O (n) tiempo y O (n) espacio.
¿Es esta la solución óptima? Puedo publicar mi código si alguien piensa que es relevante.
Si tu La implementación de la lista vinculada mantiene una propiedad de tamaño, luego solo tiene que caminar hasta la mitad de la lista para cortarla por la mitad. (Puede que quiera visitar http://codereview.stackexchange.com!) – Jeremy
@Jeremy Heiler: Propiedad sin tamaño, solo una lista muy simple de enlaces jane, realmente nada más que un grupo de nodos unidos entre sí. –
A menos que su examen requiera que implemente el ordenamiento, también puede usar Collections.sort para hacer la ordenación. – karakuricoder