Processe o elemento menor ou o maior, dependendo que esteja mais próximo (em valor, não índice) para o elemento inicial e, em seguida, basta processar os elementos restantes à direita ou à esquerda (dependendo se processamos o menor ou o maior elemento ).
Então, dado 4,9,10,11,19
Começando de 10
:
A distância de 10
para o menor elemento 4
é 6, a distância de 10
para o maior elemento 19
é 9, então vá para 4
.
Em seguida, processe os restantes elementos em ordem classificada - 9, 11, 19
.
Isso nos dá 10 -> 4 -> 9 -> 11 -> 19
, que custa 6 + 5 + 2 + 8 = 21
.
Isso pode ser feito em O(n)
.
Observação:
Vale a pena notar que, enquanto avançarmos pela primeira vez em direção ao lado mais próximo, depois em direção ao outro lado (independentemente de quais elementos processamos quando, desde que não mudemos de direção mais de uma vez), obteremos um resultado ideal .
É por isso 10 -> 9 -> 4 -> 11 -> 19
também dá 21
.