https://medium.com/@gustavowill/big-o-notation-and-time-complexities-a-simplified-but-complete-explanation-c24ebf22cd94