# Who Should Take This Course

Evaluate whether this course fits your needs and skill level.

## We'll cover the following

## Intended audience

Whether you are preparing for a coding interview, a speed programming contest, or just want to improve your coding skills, this course is for you.

Many problems require an exhaustive search through the solution space. These are some of the hardest questions in coding interviews, often showing up in the second or third round. Many of them are best tackled using dynamic programming techniques that radically improve the runtime efficiency of the solution.

This course will walk you through some of the most useful dynamic programming patterns, so that you get sufficient practice to:

Recognize a problem as a candidate for a dynamic programming solution.

Recognize the particular dynamic programming pattern that is best suited to solve it.

Break down the problem into subproblems.

Design the algorithm to solve individual subproblems and merge their solutions.

## Prerequisites

You’ll need to have some familiarity with the following data structures:

- Arrays
- 2-D Arrays
- 3-D Arrays

- Stacks
- Linked lists
- Queues
- Vectors
- Hash maps
- Trees

In addition, you’ll need to know the basics of programming, recursion, wrapper functions, and object-oriented programming. Lastly, you’ll need to be familiar with Big-O notation for complexity analysis.