https://medium.com/javarevisited/15-essential-coding-interview-patterns-to-solve-100-leetcode-problems-47797d3bdd44