Proceso, ya sea el elemento más pequeño o más grande, dependiendo que esté más cerca (en valor, no índice) al elemento inicial, simplemente procese los elementos restantes a la derecha o hacia la izquierda (dependiendo de si procesamos el elemento más pequeño o más grande ).
Entonces, dado 4,9,10,11,19
empezando desde 10
:
La distancia de 10
al elemento más pequeño 4
es 6, la distancia de 10
al elemento más grande 19
son 9, así que muévete a 4
.
Luego procese los elementos restantes en orden ordenado - 9, 11, 19
.
Esto nos da 10 -> 4 -> 9 -> 11 -> 19
, que cuesta 6 + 5 + 2 + 8 = 21
.
Esto se puede hacer en O(n)
.
Nota:
Vale la pena señalar que mientras nos movemos primero hacia el lado más cercano, luego hacia el otro lado (independientemente de los elementos que procesemos cuando, siempre que no cambiemos de dirección más de una vez), obtendremos un resultado óptimo .
Es por eso 10 -> 9 -> 4 -> 11 -> 19
también da 21
.