https://medium.com/@manikmia.dev/understanding-big-o-notation-time-complexity-and-space-complexity-9021f5309345