Cara, esses problemas de leet code, beecrowd, maratona e etc, sempre já são manjandos, igual 98% dos problemas da programação, você tem que saber que existe, por que algum fdp no quarto escuro da sua casa já pensou em uma solução 100x melhor que a sua. Exige bastante estudo e a maior parte desses estudos que vejo são, ou vieram, de livros e/ou artigos acadêmicos, livros como Algoritmos vão te apresentar 80% dos algoritmos e estrutura de dados, além de uma base matemática (pode ter outros livros só com foco em problemas como do leet code, mas desconheço). Os outros 20% você vai aprender da forma que fez mesmo, tentando resolver, gastando neurônio, se fudendo e no final vendo a solução de um indiano, e tendo aquele Insight Ahhhh! Já existe um técnica pra resolver exatamente problemas como esse
, igual design patterns no âmbito da arch
.
Deixando minha contribuição, as técnicas mais famosas que conheço são essas.
- Todos algoritmos envolvendo arvores (bfs, dfs, balance tree...)
- Todos algoritmos envolvendo grafos
- Dynamic programming (bottom-up e top-down)
- Entender que alguns algoritmos são NP e vão ter uma solução ideal, e não a melhor
- greedy algorithms
- backtracking
- dividir pra conquistar
- sliding window