Two Pointers

Introdução

Two Pointers é uma técnica muito utilizada em questões de leetcode envolvendo estruturas de dados iteráveis. Como o próprio nome sugere, consiste de utilizar 2, ou mais, ponteiros para percorrer a estrutura.

Através dessa técnica, podemos criar algoritmos mais eficientes, escapando muitas vezes de uma time complexity de O(N^2).

Prefix Sum

O principal objetivo da técnica Prefix Sum é permitir você fazer queries de soma em tempo constante.

Por exemplo, imagine o array [0, 1, 2, 3, 4, 5] e eu peço a você para fazer um algoritmo que some todos os elementos desse array.

Você poderia iterar o array, e fazer a soma, resultando em 15, e isso te custaria um tempo de execução O (N).

Imagine, agora, que você precisa saber a soma até o índice 2 do array, do índice 2 até o índice 4, e a soma de todos os elementos do array. Você teria 3 operações O (N). Fica nítido que se você precisa fazer muitas operações de queries de soma você acaba consumindo muito processamento, então o que vamos fazer, é uma troca.

Vamos criar um array que consiste em todas as somas do índice 0 até o índice i, nesse caso:

[0, 1, 3, 6, 10, 15]

Então, se eu quiser saber a soma de todos os elementos até o índice 2, basta eu acessar o índice 2 do array. É claro que criar esse array custa O (N) tanto no tempo de execução, quanto na memória. Mas acessar as somas depois é O (1), reduzindo demasiadamente o tempo de execução de fazer muitas operações. Ou seja, nós fizemos uma troca, trocamos uma parte da memória para termos um algoritmo mais rápido!

Last updated