We may earn an affiliate commission when you visit our partners.
Course image
Holczer Balazs

This course is about the fundamental concepts of algorithmic problems focusing on recursion, backtracking, dynamic programming and divide and conquer approaches. As far as I am concerned, these techniques are very important nowadays, algorithms can be used (and have several applications) in several fields from software engineering to investment banking or R&D.

Section 1 -

  • Fibonacci numbers

  • factorial function

  • tower of Hanoi problem

  • Section 2 - SEARCH 

  • how to find the k-th order statistics in O(N) linear running time?

  • Read more

    This course is about the fundamental concepts of algorithmic problems focusing on recursion, backtracking, dynamic programming and divide and conquer approaches. As far as I am concerned, these techniques are very important nowadays, algorithms can be used (and have several applications) in several fields from software engineering to investment banking or R&D.

    Section 1 -

  • Fibonacci numbers

  • factorial function

  • tower of Hanoi problem

  • Section 2 - SEARCH 

  • how to find the k-th order statistics in O(N) linear running time?

  • quickselect algorithm

  • median of medians algorithm

  • the secretary problem

  • Section 4 - BIT 

  • n-queens problem

  • Hamiltonian cycle problem

  • coloring problem

  • knight's tour problem

  • Sudoku game

  • Section 6 - DYNAMIC 

  • knapsack problem

  • rod cutting problem

  • subset sum problem

  • Kadan's algorithm (maximum subarray)

  • longest common subsequence (LCS) problem

  • Section 7 - OPTIMAL PACKING 

    • what is optimal packing?

    • bin packing problem

    Section 8 - DIVIDE AND CONQUER 

  • dynamic programming and divide and conquer method

  • how to achieve sorting in O(NlogN) with merge sort?

  • the closest pair of points problem

  • Section 9 - COMMON INTERVIEW QUESTIONS

    • top interview questions (Google, Facebook and Amazon)

    • anagram problem

    • palindrome problem

    • trapping rain water problem

    • egg dropping problem

    • dutch national flag problem

    In each section we will talk about the theoretical background for all of these algorithms then we are going to implement these problems together from scratch in Java.

    Finally, YOU CAN LEARN ABOUT THE MOST COMMON INTERVIEW QUESTIONS (Google, Microsoft, Amazon etc.)

    Thanks for joining the course, let's get started.

    Enroll now

    What's inside

    Learning objectives

    • Understand recursive approaches
    • Understand backtracking
    • Understand dynamic programming
    • Understand divide and conquer methods
    • Implement 15+ algorithmic problems from scratch
    • Improve your problem solving skills and become a stronger developer

    Syllabus

    Introduction
    Understand the basics of recursive method calls and get a good grasp of using recursion with concrete problems
    What are stack and heap memory?
    Read more

    Traffic lights

    Read about what's good
    what should give you pause
    and possible dealbreakers
    Covers dynamic programming and divide and conquer methods, which are essential for algorithm design and optimization in software development
    Includes common interview questions from top tech companies like Google, Facebook, and Amazon, offering practical preparation for job interviews
    Explores recursion, backtracking, and dynamic programming, which are fundamental concepts in computer science curricula and algorithm design courses
    Focuses on implementing algorithms from scratch in Java, providing hands-on experience for Java developers looking to improve their skills
    Aims to improve problem-solving skills, which are valuable in various fields beyond software engineering, such as finance and research and development
    Requires familiarity with stack and heap memory, which may necessitate additional study for individuals without a computer science background

    Save this course

    Create your own learning path. Save this course to your list so you can find it easily later.
    Save

    Reviews summary

    Core algorithms: recursion, backtracking, dynamic programming in java

    According to learners, this course offers a largely positive exploration of core algorithmic paradigms including Recursion, Backtracking and Dynamic Programming, with implementations in Java. Many found the explanations clear and helpful for understanding complex concepts and their practical application, especially for interview preparation. The course provides a solid foundation and covers many important problems like the Knapsack problem and N-queens. While generally well-received, some reviewers noted that certain topics could benefit from more depth or additional practice problems. The code implementations were often highlighted as a strong point.
    Covers important specific algorithms.
    "I liked the coverage of less common selection algorithms like Quickselect and Median of Medians."
    "The section on dynamic programming problems like Knapsack and LCS was excellent and covered essential ground."
    "It includes many classic algorithmic problems from recursion, backtracking, and DP domains."
    Learn to code algorithms in Java.
    "Implementing classic problems like the N-queens and Sudoku in Java was very practical and hands-on."
    "The code examples provided were easy to follow and helped me apply the concepts immediately."
    "I appreciate the focus on implementing these algorithms from scratch in Java; it really solidified my understanding."
    "The hands-on coding exercises are definitely a highlight and reinforce the theoretical concepts."
    Concepts are explained well.
    "The way recursion was explained made it click for me, very clear and easy to grasp."
    "Finally, after many attempts, I understood dynamic programming thanks to this course's explanations."
    "The instructor breaks down complex ideas effectively, making them much more digestible for a learner."
    "I found the explanations on backtracking especially helpful in understanding the search space."
    Helpful for technical interviews.
    "This course was a great resource for brushing up on algorithms for coding interviews, covering many common questions."
    "It covers many classic interview problems from companies like Google and Amazon, which is exactly what I needed."
    "After taking this course, I felt much more confident tackling the algorithm questions during my technical interviews."
    Requires some prior basics.
    "The course assumes a basic understanding of data structures like arrays and lists, and intermediate Java skills."
    "This might be challenging for absolute beginners in algorithms; some foundational knowledge is recommended."
    "Ensure you have a decent grasp of Java fundamentals before diving into the implementations."
    Some topics need more detail.
    "While it covers a lot, I felt some topics, particularly dynamic programming, could use more in-depth coverage."
    "Some sections felt a bit rushed; I would have liked more time spent on optimization techniques."
    "For advanced learners, the depth might be insufficient, but it's great for building a foundation."

    Activities

    Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Recursion, Backtracking and Dynamic Programming in Java with these activities:
    Review Data Structures and Algorithms Fundamentals
    Strengthen your understanding of fundamental data structures and algorithms concepts in Java. This will provide a solid foundation for understanding the more advanced topics covered in the course, such as recursion and dynamic programming.
    Browse courses on Data Structures
    Show steps
    • Review basic data structures like arrays, linked lists, stacks, and queues.
    • Practice implementing common sorting algorithms like bubble sort, insertion sort, and merge sort.
    • Familiarize yourself with Big O notation for analyzing algorithm efficiency.
    Read 'Cracking the Coding Interview'
    Gain exposure to common coding interview questions related to recursion, backtracking, and dynamic programming. This will help you apply the concepts learned in the course to real-world problems.
    Show steps
    • Read the chapters on recursion, backtracking, and dynamic programming.
    • Solve the practice problems at the end of each chapter.
    • Analyze the provided solutions and understand the reasoning behind them.
    Solve Recursion Problems on LeetCode
    Reinforce your understanding of recursion by solving a variety of problems on LeetCode. This will help you develop your problem-solving skills and improve your ability to apply recursion to different scenarios.
    Show steps
    • Search for recursion-related problems on LeetCode.
    • Attempt to solve the problems independently.
    • Analyze the solutions and learn from your mistakes.
    Four other activities
    Expand to see all activities and additional details
    Show all seven activities
    Help Other Students on the Course Forums
    Reinforce your understanding by helping other students who are struggling with the material. Explaining concepts to others is a great way to identify gaps in your own knowledge and solidify your understanding.
    Show steps
    • Regularly check the course forums for questions from other students.
    • Provide helpful and informative answers to their questions.
    • Explain your reasoning clearly and concisely.
    Implement a Sudoku Solver using Backtracking
    Apply your knowledge of backtracking to build a practical application. This project will challenge you to think critically and creatively about how to use backtracking to solve complex problems.
    Show steps
    • Design the data structures to represent the Sudoku board.
    • Implement the backtracking algorithm to find a solution.
    • Test your solver with different Sudoku puzzles.
    Create a Video Explaining Dynamic Programming
    Solidify your understanding of dynamic programming by creating a video explaining the concept to others. This will force you to think deeply about the topic and communicate it in a clear and concise manner.
    Show steps
    • Choose a specific dynamic programming problem to explain.
    • Create a script and storyboard for your video.
    • Record and edit your video.
    • Share your video with others and get feedback.
    Review 'Introduction to Algorithms' (CLRS)
    Deepen your understanding of the theoretical underpinnings of recursion, backtracking, and dynamic programming. This book provides a rigorous treatment of these topics and will help you develop a more sophisticated understanding of algorithm design.
    Show steps
    • Read the relevant chapters on recursion, dynamic programming, and divide and conquer.
    • Work through the examples and exercises in the book.
    • Compare the book's approach to the concepts covered in the course.

    Career center

    Learners who complete Recursion, Backtracking and Dynamic Programming in Java will develop knowledge and skills that may be useful to these careers:
    Algorithm Developer
    An algorithm developer focuses on designing and implementing algorithms for various applications. This course on recursion, backtracking, and dynamic programming in Java helps equip algorithm developers with essential techniques for solving complex computational problems. The course's exploration of search algorithms, bit manipulation, and dynamic programming provides a strong background for designing efficient and reliable algorithms. Algorithm developers can leverage the course's focus on common interview questions to enhance their problem-solving skills and excel in technical assessments.
    Software Engineer
    A software engineer designs, develops, and tests software applications. This course on recursion, backtracking, and dynamic programming in Java helps build a foundation for designing efficient algorithms, which are crucial in software development. The course's emphasis on solving algorithmic problems from scratch, including those related to search and optimization, directly translates to the skills needed to write high-quality code and tackle complex software engineering challenges. A software engineer can also use the dynamic programming or divide and conquer approaches covered in the course.
    Game Developer
    A game developer designs and creates video games, often requiring strong problem-solving and algorithmic skills. This course on recursion, backtracking, and dynamic programming in Java provides a solid background for game development. Game developers can use the recursion knowledge to implement game mechanics, AI, and pathfinding algorithms. The course's exploration of backtracking through problems like the N-queens problem and the knight's tour can directly translate to designing game puzzles and challenges. Game developers benefit from the focus on implementing algorithms from scratch.
    Operations Research Analyst
    An operations research analyst uses mathematical and analytical methods to help organizations make better decisions. This course on recursion, backtracking, and dynamic programming in Java helps equip the analyst with the skills to model and solve complex optimization problems. The course's coverage of dynamic programming techniques and optimal packing problems directly applies to supply chain management, logistics, and resource allocation. Operations research analysts use the problem-solving skills developed during the course to provide data-driven recommendations.
    Quantitative Analyst
    A quantitative analyst, also known as a quant, uses mathematical and statistical methods to solve problems in finance. This course on recursion, backtracking, and dynamic programming in Java helps equip someone to develop and implement algorithms for financial modeling, risk management, and trading strategies. The course's coverage of optimization problems and search algorithms helps a quantitative analyst design efficient and accurate solutions. The emphasis on dynamic programming techniques and divide and conquer will be valuable for tackling complex financial challenges.
    Robotics Engineer
    A robotics engineer designs, builds, and programs robots for various applications. This course on recursion, backtracking, and dynamic programming in Java is particularly helpful for a robotics engineer who needs to implement complex algorithms for robot control, path planning, and decision-making. The course's coverage of search algorithms and dynamic programming techniques helps robotics engineers optimize robot performance and efficiency. The exploration of backtracking through problems like the maze problem can also aid in developing robot navigation strategies.
    Research Scientist
    A research scientist conducts research to advance knowledge in a specific field. Depending on the area of research, this course on recursion, backtracking, and dynamic programming in Java helps a research scientist develop and implement novel algorithms or optimize existing ones. The course's coverage of dynamic programming and divide and conquer methods provides a strong background for tackling complex research problems. A research scientist can also use the course's emphasis on problem-solving to approach research challenges creatively and effectively. A graduate degree is typically required.
    Financial Engineer
    A financial engineer applies mathematical and computational methods to solve complex financial problems. This course on recursion, backtracking, and dynamic programming in Java can be valuable. Financial engineers use a knowledge of algorithms to develop trading strategies, manage risk, and price derivatives. The course's coverage of dynamic programming and optimization problems can be applied to portfolio optimization, algorithmic trading, and risk management models. A financial engineer can use the course's exploration of common interview questions.
    Bioinformatician
    A bioinformatician analyzes biological data using computational tools and techniques. This course on recursion, backtracking, and dynamic programming in Java helps in bioinformatics by developing efficient algorithms for sequence alignment, phylogenetic analysis, and drug discovery. The course's coverage of dynamic programming and search algorithms supports a bioinformatician's ability to tackle complex biological datasets. A bioinformatician can use the problem sets on knapsack problem and longest common subsequence problems.
    Machine Learning Engineer
    A machine learning engineer develops and deploys machine learning models. This course on recursion, backtracking, and dynamic programming in Java may be useful to improve algorithm design skills, which are essential for optimizing machine learning algorithms and improving their performance. The course's exploration of search algorithms and dynamic programming techniques supports a machine learning engineer's ability to tackle complex optimization problems in machine learning. Furthermore, interview questions and algorithmic problems like subset sum help improve the engineer's understanding.
    Data Scientist
    A data scientist analyzes large datasets to extract meaningful insights and build predictive models. This course on recursion, backtracking, and dynamic programming in Java may be useful for a data scientist looking to enhance their algorithmic skills. Data scientists often encounter optimization and search problems, where dynamic programming, divide and conquer and backtracking techniques prove valuable. The course's coverage of interview questions and algorithmic problems, such as the knapsack problem and longest common subsequence problem, supports a data scientist's ability to tackle real-world data challenges.
    Data Engineer
    A data engineer is responsible for designing, building, and maintaining data infrastructure. This course on recursion, backtracking, and dynamic programming in Java may be useful for a data engineer who wants to optimize data processing pipelines and improve data retrieval efficiency. The course's coverage of search algorithms and divide and conquer techniques could help improve data manipulation and storage strategies. Data engineers who learn about topics such as optimal packing from this course can improve their skills. Data engineers may also be involved with interview questions about Google, Microsoft, and Amazon.
    Systems Architect
    A systems architect designs and oversees the implementation of complex software or hardware systems. This course on recursion, backtracking, and dynamic programming in Java may be useful for system optimization and resource allocation within large systems. Systems architects can use the course's focus on dynamic programming and divide and conquer methods to make informed decisions about system design. Understanding the performance implications of different algorithms, as discussed in the course, helps a systems architect create scalable and efficient solutions.
    Cryptographer
    A cryptographer designs and analyzes encryption algorithms to secure data. This course on recursion, backtracking, and dynamic programming in Java may be valuable in cryptography, where designing efficient algorithms is critical. Cryptographers can apply the course's coverage of search algorithms and bit manipulation techniques to enhance the security and performance of cryptographic systems. A deep understanding of algorithmic complexity helps cryptographers develop robust encryption methods and analyze potential vulnerabilities. A graduate degree is typically required.
    Database Administrator
    A database administrator manages and maintains databases to ensure data is securely stored and accessible. This course on recursion, backtracking, and dynamic programming in Java may be useful for optimizing database queries and improving data retrieval efficiency. The course's coverage of search algorithms and divide and conquer techniques could help a database administrator design efficient indexing strategies and improve query performance. A database administrator who learns about topics such as optimal packing problems from this course can improve their skills.

    Reading list

    We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Recursion, Backtracking and Dynamic Programming in Java.
    Comprehensive textbook covering a wide range of algorithms in depth. It includes detailed explanations and pseudocode for recursion, dynamic programming, and divide-and-conquer techniques, aligning perfectly with the course's core topics. It's a valuable resource for understanding the theoretical underpinnings and practical applications of these algorithms, and is commonly used in university-level algorithms courses.
    Focuses on preparing for technical interviews, with a strong emphasis on algorithms and data structures. It includes numerous practice problems related to recursion, backtracking, and dynamic programming, mirroring the course's focus on common interview questions. It's particularly useful for students aiming to improve their problem-solving skills and prepare for job interviews at top tech companies.

    Share

    Help others find this course page by sharing it with your friends and followers:

    Similar courses

    Similar courses are unavailable at this time. Please try again later.
    Our mission

    OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

    Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

    Find this site helpful? Tell a friend about us.

    Affiliate disclosure

    We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

    Your purchases help us maintain our catalog and keep our servers humming without ads.

    Thank you for supporting OpenCourser.

    © 2016 - 2025 OpenCourser