Escrito por Lúcio Figueiredo
Conhecimento prévio necessário:
Imagine que existem quatro índices do vetor de modo que . Assuma que . Vamos fixar os índices e , ou seja, em , vamos iterar por cada par de índices do vetor e fixá-los como e . Agora, queremos descobrir se existe um par de modo que e sejam menores que e e de modo que a soma dos 4 índices seja , ou seja, .
Para encontrar os índices (se existirem), podemos utilizar um map de inteiros para pares que guarda, para cada soma , um par de índices com tal soma (ou seja, tal que ). Para garantir que os índices serão distintos, é necessário cuidado ao armanezar os valores no map. Iremos iterar por cada indíce de a mantendo a propriedade de que armazenamos no map todas as somas utilizando apenas índices menores que . Assim, dentro do loop que itera pelo índice , podemos fixar o índice e tentar encontrar, usando o map, um par de inteiros com soma igual a . Caso seja possível encontrar tal soma no map, conseguimos encontrar 4 índices com soma igual a : e o par contido em .
Caso não encontremos os 4 índices utilizando o indíce , temos que incluir no map as somas com e para . Para isso, basta iterar por todo e indicar que . Agora que o map foi atualizado, podemos tentar encontrar uma soma igual a que utiliza índices maiores que . A complexidade final da solução é , já que utilizamos um map dentro de loops em . Confira o código abaixo para melhor entendimento: