DEV Community

Gabriel Pereira
Gabriel Pereira

Posted on

Leetcode 1472 - Design Browser History

Image description

Image description

O desafio envolve "implementar" um historico de navegacao onde temos 3 operacoes: visit, back e forward, sendo bem simples e direto, as operacoes back e forward avancam/retornam no historico, a operacao visit deve acessar uma nova pagina a partir da posicao atual, limpando o historico de acesso posterior.

Ex:

1 - input inicial, instanciando a classe com uma url:
BrowserHistory("www.google.com")

2 - visit
BrowserHistory.visit("www.facebook.com")

3 - visit
BrowserHistory.visit("www.linkedin.com")

Image description

4 - back 2 steps
BrowserHistory.back(2)

Image description

5 - forward 1 step
BrowserHistory.forward(1)

Image description

6 - visit www.youtube.com
BrowserHistory.visit("www.youtube.com")

Image description

Approach 1 - Usando doubly singled list (menos performático)

Image description

usando essa estrutura, cada no da lista ligada armazena o endereco do proximo/anterior

Image description

Sendo mais custoso por ter que percorrer um loop toda vez que usar as operacoes back/forward, complexidade de tempo e espaco O(n) onde n é o número de steps

Approach 2 - usando um array e um pointer para salvar as posicoes (mais performatico)

Image description

Como nao é necessário percorrer o array nas operações de back/forward, a complexidade de tempo é O(1) e a complexidade de espaço é O(n) onde n é o numero de urls visitadas usando o método visit()

Top comments (0)