Thank you for purchasing early access to Classic Computer Science Problems in Java. Java is a popular language that attracts developers from a variety of backgrounds. I believe the problems in this intermediate book will help seasoned programmers refresh their CS knowledge, and new/self-taught programmers accelerate their CS education. All readers will deepen their skills in the Java language. This book covers such a diversity of problem-solving techniques, that there is truly something for everyone. However, basic knowledge of the Java language is assumed. This is a great second book on Java, but not a book for complete beginners.
Chapter 1, Small Problems, introduces problem solving techniques that will likely look familiar to most readers. Things like recursion, memoization, and simulation are essential building blocks of other techniques that are explored in later chapters. We follow this gentle introduction with Chapter 2, Search Problems. Search is such a large topic that you could arguably place most problems in the entire book under its banner. Our goal in chapter 2 is to introduce the most essential search algorithms including binary search, depth-first search, breadth-first search, and A*. Some of these algorithms are reused later in the book.