Solução escrita por João Pedro Castro
Podemos exemplificar esse problema para: “ache o tamanho do maior intervalo contínuo dentro de um array com todos os valores distintos”, e para resolver esse problema podemos usar a ideia de guardar a última posição que cada valor apareceu, e depois fazer contas simples para atualizar a maior quantidade de valores distintos em um intervalo terminando na posição atual.
Vamos usar a ideia de um array 1-indexado, e inicializar o vetor
(ultima vez que um valor apareceu) como 0, e com o tamanho
. Também vamos criar uma varíavel com o tamanho do intervalo terminando na posição
atual, chamaremos esse valor de
. Agora, para cada valor
rodamos:
- Se
estiver dentro do intervalo atual (
), logo, adicionar ele de novo quebraria as regras:
, ou seja, tiramos do tamanho a parte que vai do começo até a última vez que
apareceu.
(o tamanho aumenta em 1, pois adicionamos o
ao final do intervalo)![u[X_i] = i](https://i0.wp.com/noic.com.br/wp-content/plugins/latex/cache/tex_3b6ae1cba7cc91b48236848fbc402b69.gif?ssl=1)
Agora fica claro que a resposta vai ser o
máximo entre todas as posições
.
