Algorithm patterns and problem solving techniques. Patterns Sliding Window Subsets Dynamic Programming Binary Tree