These are my solutions to common algorithmic problems. Generally, I will first try to solve the problem by any means necessary. Then, I will refactor the algorithm until I have something that adheres more closely to the principals of DRY, code reuse and readability, along with time/space complexity improvements.
Each directory holds the original solution along with each refactored algo for a particular problem.