719. Encontre a K-ésima menor distância do par
Dificuldade: Difícil
Tópicos: Matriz, dois ponteiros, pesquisa binária, classificação
A distância de um par de inteiros aeb é definida como a diferença absoluta entre a e b.
Dado um array inteiro nums e um inteiro k, retorne a késima menor distância entre todos os pares nums[i] e nums[j] onde 0 .
Exemplo 1:
(1,3) -> 2 (1,1) -> 0 (3,1) -> 2
Então o 1st menor par de distância é (1,1) e sua distância é 0.
Exemplo 2:
Exemplo 3:
Restrições:
Dica:
Solução:
Podemos usar uma combinação de pesquisa binária e técnica de dois ponteiros. Aqui está uma abordagem passo a passo para resolver esse problema:
Classificar o array: primeiro, classifique os números do array. A classificação ajuda a calcular com eficiência o número de pares com distância menor ou igual a um determinado valor.
Pesquisa binária por distância: Use a pesquisa binária para encontrar a k-ésima menor distância. O espaço de busca para as distâncias varia de 0 (a menor distância possível) a max(nums) - min(nums) (a maior distância possível).
Contar pares com distância ≤ meio: Para cada valor médio na pesquisa binária, conte o número de pares com distância menor ou igual a meio. Isso pode ser feito de forma eficiente usando uma abordagem de dois ponteiros.
Ajustar intervalo de pesquisa binária: Dependendo do número de pares com distância menor ou igual a meio, ajuste o intervalo de pesquisa binária. Se a contagem for menor que k, aumente o limite inferior; caso contrário, diminua o limite superior.
Vamos implementar esta solução em PHP: 719. Encontre a K-ésima menor distância do par
countPairsWithDistanceLessThanOrEqualTo: Esta função conta quantos pares têm uma distância menor ou igual a mid. Ele usa dois ponteiros, onde right é o elemento atual e left é ajustado até que a diferença entre nums[right] e nums[left] seja menor ou igual a mid.
smallestDistancePair: Esta função usa pesquisa binária para encontrar a k-ésima menor distância. Os valores baixo e alto definem o intervalo de pesquisa atual para as distâncias. O valor médio é verificado usando a função countPairsWithDistanceLessThanOrEqualTo. Dependendo do resultado, o espaço de pesquisa é ajustado.
Este algoritmo encontra com eficiência a k-ésima menor distância do par com uma complexidade de tempo de O(n log(max(nums) - min(nums)) n log n).
Links de contato
Se você achou esta série útil, considere dar uma estrela ao repositório no GitHub ou compartilhar a postagem em suas redes sociais favoritas ?. Seu apoio significaria muito para mim!
Se você quiser mais conteúdo útil como este, sinta-se à vontade para me seguir:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3