Algorithmic Toolbox online course by University of California San Diego
The course covers basic algorithmic techniques and ideas for computational problems arising frequently in practical applications: sorting and searching, divide and conquer, greedy algorithms, dynamic programming, and many others, You will learn how to sort and search data, how to break a large problem into pieces and solve them recursively; how to pack your knapsack using greedy algorithms, and how to search for similarities between genes using dynamic programming. You will practice solving computational problems, designing new algorithms, and implementing them as efficient software tools.
The problems to each section are in the different directories associated with some solutions