"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Dissecando a técnica de dois ponteiros

Dissecando a técnica de dois ponteiros

Publicado em 15/08/2024
Navegar:532

Dissecting the two pointer technique

Introdução.

Mesmo depois de dominar os fundamentos de arrays e listas, resolver problemas relacionados a essas estruturas de dados às vezes pode parecer cansativo. Além de compreender as próprias estruturas de dados - juntamente com suas operações e complexidades de tempo e espaço; compreender várias técnicas que se aplicam a esses problemas pode tornar o processo muito mais fácil.
Isto é especialmente verdadeiro dada a grande variedade de problemas que podem surgir com matrizes ou listas. Nesta postagem do blog, vou me concentrar em uma dessas técnicas: a técnica de dois ponteiros, que é particularmente eficaz para lidar com problemas de array ou lista.

Duas dicas.

A técnica de dois ponteiros é uma abordagem algorítmica, particularmente eficaz para resolver matrizes ou sequências. Isso significa que a abordagem também pode ser aplicada a strings e listas vinculadas.
Envolve o uso de dois ponteiros distintos para percorrer a estrutura de dados, muitas vezes levando a uma solução eficiente com menor complexidade de tempo.

Tipos de dois ponteiros.

Ponteiros movendo-se um em direção ao outro.

Essa abordagem envolve dois ponteiros começando em extremidades opostas da estrutura de dados e movendo-se um em direção ao outro, o que significa que os ponteiros se movem em direções opostas. Este tipo de técnica de dois ponteiros é particularmente útil em cenários onde você deseja encontrar um par de elementos que atendam a determinadas condições ou ao comparar elementos de ambas as extremidades. Casos de uso comuns incluem a verificação de um palíndromo ou a localização de pares com uma soma específica

Abordagem

  1. Inicialize os ponteiros: comece com um ponteiro no início (esquerda) e outro no final (direita) da estrutura de dados.
  2. Mova os ponteiros: ajuste os ponteiros um em direção ao outro com base nas condições fornecidas.
  3. Verificar condições: continue movendo os ponteiros um em direção ao outro até que o resultado desejado seja encontrado ou uma condição específica seja atendida

Exemplo:Dada uma string s, inverta a ordem dos caracteres em cada palavra dentro de uma frase, preservando os espaços em branco e a ordem inicial das palavras.

def reverseWords(s: str) -> str:
    words = s.split()  # Split the input string into words

    for i in range(len(words)):
        left = 0  # Initialize the left pointer
        right = len(words[i]) - 1  # Initialize the right pointer
        split_word = list(words[i])  # Convert the word into a list of characters

        while left 



Ponteiros movendo-se na mesma direção.

Nesta abordagem, ambos os ponteiros começam na mesma extremidade da estrutura de dados e se movem na mesma direção. Essa técnica é frequentemente usada quando você precisa rastrear uma janela ou submatriz dentro de uma matriz, permitindo mover e ajustar a janela com eficiência com base em determinadas condições. Casos de uso comuns incluem a técnica de janela deslizante e mesclagem de matrizes classificadas.

Abordagem

  1. Inicializar dois ponteiros: comece com ambos os ponteiros no início da estrutura de dados.
  2. Mova os ponteiros: mova um ponteiro (geralmente o mais rápido) à frente do outro com base em condições específicas.
  3. Ajuste os ponteiros: modifique as posições dos ponteiros conforme necessário para manter as condições de janela desejadas.

Exemplo:Você recebe duas strings palavra1 e palavra2. Mescle as strings adicionando letras em ordem alternada, começando com palavra1. Se uma string for maior que a outra, anexe as letras adicionais ao final da string mesclada.

def mergeAlternately(word1: str, word2: str) -> str:
    # Initialize an empty list to store the merged characters
    word_list = []

    # Initialize two pointers, starting at the beginning of each word
    pointer_1 = 0
    pointer_2 = 0

    # Loop until one of the pointers reaches the end of its respective word
    while pointer_1 



Conclusão

A técnica de dois ponteiros é uma ferramenta versátil e eficiente no mundo dos algoritmos, especialmente quando se trata de arrays, strings e listas vinculadas. Estejam os ponteiros se movendo um em direção ao outro ou na mesma direção, essa abordagem pode simplificar problemas complexos e melhorar o desempenho de suas soluções. Ao compreender e aplicar essas estratégias, você estará mais bem equipado para enfrentar uma ampla gama de desafios de codificação.

Eu encorajo você a praticar essas técnicas resolvendo vários problemas e experimentando diferentes cenários. Com tempo e experiência, você descobrirá que a técnica de duas dicas é uma adição inestimável ao seu kit de ferramentas de resolução de problemas.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/charlesamakoye/dissecting-the-two-pointer-technique-2lb4?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

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