We may earn an affiliate commission when you visit our partners.
Andrei Margeloiu

Big update - Dynamic programming

  • Fibonacci sequence
  • Dynamic programming
  • How to spot recurrence relations?
  • 0/1 Knapsack problem
  • Stack
  • Check parenthesis expression
  • Queue

"I learned a lot of things from this course. The GOLD trick was awesome." Arpan P.

"I started thinking about problems in a more efficient way..." Mokshagna S.

"It's deep, rich in information, consistent and dense" Laurentiu M.

"It's a very good course, it focuses on building your concept." Saransh S.

"Awesome, it's just awesome" Yazan R.

Read more

Big update - Dynamic programming

  • Fibonacci sequence
  • Dynamic programming
  • How to spot recurrence relations?
  • 0/1 Knapsack problem
  • Stack
  • Check parenthesis expression
  • Queue

"I learned a lot of things from this course. The GOLD trick was awesome." Arpan P.

"I started thinking about problems in a more efficient way..." Mokshagna S.

"It's deep, rich in information, consistent and dense" Laurentiu M.

"It's a very good course, it focuses on building your concept." Saransh S.

"Awesome, it's just awesome" Yazan R.

I'm a competitive programmer, World Finalist in Google HashCode algorithmic challenge, and a 3x Gold Medalist in the Computing Olympiad C/C++. You will learn fundamentals Algorithms & Data structures fast and the knowledge will resist because I teach you using visual examples.

You will get my advice every time you need it. Just message me.

If you know the basics of C++, this course suits you perfectly .

I've designed this course to take you down a guided learning path. You will find some GOLD tricks sprinkled throughout the course that will help you become an algorithmic ninja.

What can you take from me ?

I have spent 5 years of my life learning this topic by myself. You have the possibility to take my knowledge for granted. I'm teaching in the way I learnt: with illustration and examples.

My Promise to You

Algorithms and Data structures brought me success and immense satisfaction. I created this course to share my knowledge with you because I love this topic and I promise to teach you with enthusiasm. If you need support, I will be just a message away.

My Approach

Practice, practice and more practice. After each lecture, I will guide you to solve little problems. The most important thing you can obtain from this course is to think like a problem solver.

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Syllabus

Introduction

Why to do this course? Get the motivation to finish it.

Have a view over the curriculum (which became bigger over time). Please set the video quality to 720p.

Read more

Install the developing environment. You can use any other IDE that support C++11, such as Visual Studio.

I'll show you how to create a project to write your code.

Tired of writing redundant code? Learn to use Standard Template Library (or STL), which is a collection of functions embedded into C++.

Understanding the differences between Global and Local variable is crucial in order to become a professional programmer. This lecture will give you a deeper insight about them.

Go deeper into the differences between local and global variables.

You will understand everything about variables. It will help you also with other programming languages.

Learn how to debug effectively and get rid of bugs.

The bigger the complexity, the slower the algorithm. You will be able to classify algorithms based on Big O complexity notation!

I am sure this lecture will give you the 'aha, I got it now' sensation.

Learn to use appearance array. Later you'll extend the principle to hashmaps and dictionaries.

Learn one of the quickest way to sort small inputs.

Understand how to use Stacks properly. It has a complexity of O(1) which makes it useful for many applications.

How can you better practice using a stack than checking a parenthesis expression ?

What is a queue? It's like a queue of people waiting somewhere.

People that come will stay in the back of the queue, and people can go out the queue from the front.

So in a queue you can add elements from one end, called back, and remove from the other end, called front.

Every operation on a queue executes in O(1).

You will learn the principle behind binary search and understand how it works. You will also learn how to calculate binary search complexity.

This is the solution to the previous exercise. Very nice trick to put in your repertoire!

You will some one of the most common interview question using binary search.

You will learn how to sort small inputs.

Sorting from STL is fast and easy to implement. You will learn how to use it effectively, sorting in the way you need.

You will understand how to find the majority element using a super-trick :).

Data structures are very handy in real world situations. You will understand how they work and where you can use them.

You will go deeper into Data structures.

Constructors are useful in programming real world applications.

Polish you understanding about constructors.

Sorting arrays in a custom order is crucial in order to become a problem solver! I am sure you will find this lesson easy to understand.

Fibonacci sequence is found all over nature. You will find out how it relates to programming.

What is dynamic programming? How does dynamic programming really work? You will be able to answer those questions.

Understand one of the hardest parts of programming, finding the dynamic programming recurrence.

Solve one of the most famous dynamic programming problems. It is extended in many other applications.

This lesson represents a step-by-step guide to solving algorithmic problems. You will acquire professional level skills that will make you stand out from the crowd!

Most people think that the first idea that comes to mind it's good enough for solving a problem. You will master finding solutions after this lecture!

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Covers dynamic programming techniques, such as the 0/1 Knapsack problem, which are frequently encountered in competitive programming and algorithm design courses
Assumes a basic understanding of C++, so learners without this background may need to acquire it before taking the course
Explores the Standard Template Library (STL), which is a collection of functions embedded into C++, which can help reduce redundant code
Includes a section on how to prepare for coding interviews, which is useful for students seeking internships or full-time positions in software development
Teaches debugging techniques, which are essential for identifying and fixing errors in C++ code and other programming languages
Explains Big O complexity notation, which is a fundamental concept for analyzing the efficiency of algorithms and data structures

Save this course

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

Reviews summary

Algorithms & data structures in c++

According to learners, this course provides a solid foundation in algorithms and data structures using C++, particularly emphasizing problem-solving skills and practical application. Many found the instructor's explanations clear and appreciated the use of visual examples and practical exercises. It is frequently recommended for those preparing for coding interviews or competitive programming. However, some students noted concerns about the production quality, specifically audio and video clarity, and felt it might assume a bit more C++ knowledge than expected for an introduction.
Emphasis on thinking like a problem solver.
"As a beginner in algorithms, this course was a game-changer. The step-by-step approach to problem-solving was invaluable."
"The most important thing you can obtain from this course is to think like a problem solver."
"It helped me approach problems more systematically."
"I started thinking about problems in a more efficient way..."
Useful for coding interviews & competitive programming.
"Definitely recommend for anyone preparing for coding interviews."
"Excellent course... Perfect for competitive programming prep."
"Good course, covers the fundamentals effectively... useful for technical interviews."
"The competitive programming background of the instructor shines through and helps with interview-style problems."
Hands-on coding solidifies understanding.
"The practical exercises after each lecture were super helpful in solidifying the concepts."
"The hands-on coding and projects are the strongest part of the course for me."
"The practical exercises are key."
"I found the mini-problems after each section useful for practice."
Instructor explains complex topics effectively.
"This course is fantastic! The instructor explains complex topics like dynamic programming and Big O notation very clearly with visual examples."
"Excellent course! The explanations are crystal clear, and the exercises are well-chosen."
"Highly recommend! This course simplifies complex concepts with great analogies and visuals."
"The instructor does a good job breaking down difficult ideas."
May require prior C++ experience.
"I also found some of the C++ code examples hard to follow initially because they assumed slightly more prior knowledge than I expected from an 'Introduction'."
"The C++ parts are okay if you have some prior experience."
"It assumes you are comfortable with basic C++ syntax and STL."
"As a complete beginner in C++, I struggled a bit with the code parts."
Audio and video quality concerns raised.
"The content is good... However, the audio quality is sometimes poor, and the video resolution could be better."
"Disappointed. The production quality (audio/video) is distracting."
"The audio is terrible. It's hard to hear the instructor sometimes. The video quality is also poor."
"I had trouble understanding parts due to background noise and low video clarity."

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 Introduction to Algorithms and Data structures in C++ with these activities:
Review C++ Fundamentals
Solidify your understanding of C++ syntax and object-oriented programming concepts to prepare for the course's implementation of algorithms and data structures.
Show steps
  • Review basic syntax, data types, and control flow.
  • Practice writing simple C++ programs.
  • Familiarize yourself with object-oriented programming principles.
Review 'Cracking the Coding Interview'
Gain familiarity with common algorithm and data structure interview questions to better understand the practical applications of the course material.
Show steps
  • Read the chapters on data structures and algorithms.
  • Solve the practice problems related to each topic.
  • Analyze the provided solutions and understand the reasoning behind them.
Implement Basic Data Structures
Reinforce your understanding of data structures by implementing them from scratch in C++.
Show steps
  • Implement a linked list with insert, delete, and search operations.
  • Implement a stack and a queue using arrays or linked lists.
  • Implement a binary search tree with insert, delete, and search operations.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a Blog Post on Dynamic Programming
Deepen your understanding of dynamic programming by explaining the concept and providing examples in a blog post.
Show steps
  • Research and understand the core concepts of dynamic programming.
  • Choose a specific dynamic programming problem to explain in detail.
  • Write a clear and concise blog post with code examples in C++.
  • Publish the blog post on a platform like Medium or your own website.
Build a Simple Search Engine
Apply your knowledge of algorithms and data structures to build a practical application that involves searching and indexing.
Show steps
  • Design the architecture of the search engine.
  • Implement the indexing component using appropriate data structures.
  • Implement the search component using efficient search algorithms.
  • Test and optimize the search engine's performance.
Review 'Introduction to Algorithms' (CLRS)
Gain a deeper understanding of the theoretical underpinnings of algorithms and data structures by studying a classic textbook.
Show steps
  • Read the chapters relevant to the course syllabus.
  • Work through the exercises and problems at the end of each chapter.
  • Compare the book's explanations with the course lectures to solidify your understanding.
Contribute to an Open Source Algorithm Library
Apply your knowledge by contributing to an open-source project, enhancing your practical skills and understanding of real-world implementations.
Show steps
  • Find an open-source algorithm library written in C++.
  • Identify a bug or a missing feature that you can contribute.
  • Implement the fix or the new feature, following the project's coding style.
  • Submit a pull request with your changes.

Career center

Learners who complete Introduction to Algorithms and Data structures in C++ will develop knowledge and skills that may be useful to these careers:
Competitive Programmer
Competitive programmers participate in programming contests, solving algorithmic problems under time constraints. Success in this field relies heavily on a strong grasp of algorithms and data structures, as well as the ability to quickly implement efficient solutions. This course mirrors the demands of competitive programming by teaching fundamental algorithms and data structures with visual examples, giving 'GOLD tricks', and providing opportunities for practice. The instructor's experience as a World Finalist in Google HashCode and a 3x Gold Medalist in the Computing Olympiad C/C++ makes this course uniquely valuable for aspiring competitive programmers.
Software Engineer
A software engineer designs, develops, and tests software applications. This role requires a strong understanding of algorithms and data structures to create efficient and scalable code. This course helps build a foundation by teaching dynamic programming, stacks, queues, and complexity analysis, which are critical for optimizing software performance. Someone pursuing a career as a software engineer may find the focus on problem-solving and practical exercises to be incredibly beneficial, helping them to approach coding challenges with a structured and efficient mindset, and to learn 'GOLD tricks'.
Algorithm Developer
An algorithm developer specializes in designing and implementing algorithms for various applications, such as search engines, machine learning models, and financial systems. This role demands a deep understanding of algorithmic principles and data structures to optimize performance and accuracy. This course helps build a foundation in these areas, covering essential topics like dynamic programming, binary search, and complexity analysis. The 'aha, I got it now' sensation from understanding algorithm complexity might be useful to understanding the work that algorithm developers do. Someone wishing to become an algorithm developer should take this course.
Data Engineer
Data engineers design, build, and maintain the infrastructure that supports data storage, processing, and analysis. This role requires a strong understanding of algorithms and data structures to efficiently manage large volumes of data. The course helps build a foundation by teaching fundamental data structures like stacks and queues, and introducing dynamic programming. Mastering these concepts facilitates the development of efficient data processing pipelines. The material on STL is also highly correlated with the work that data engineers do.
Game Developer
A game developer creates video games for various platforms. This requires a strong understanding of algorithms and data structures for efficient game mechanics, artificial intelligence, and graphics rendering. This course helps build a foundation in these areas, covering topics like stacks, queues, dynamic programming, and complexity analysis, which are essential for optimizing game performance. Someone wishing to become a game developer may find the course's emphasis on problem-solving and practical applications highly valuable, enabling them to design and implement complex game systems effectively, especially when learning about how 'Data structures are very handy in real world situations'.
Back-End Developer
Back end developers are responsible for the server-side logic and databases that power web applications. This role requires a strong understanding of algorithms and data structures to ensure efficient data processing and API performance. The course helps build a foundation in these areas, covering essential topics like dynamic programming and complexity analysis. The course's emphasis on practical problems may be useful for those who wish to become back end developers.
Embedded Systems Engineer
An embedded systems engineer designs and develops software for embedded systems, such as those found in automobiles, appliances, and industrial equipment. Efficiency is critical in embedded systems due to limited resources. This course's focus on data structures like stacks and queues, as well as complexity analysis, helps build a foundation in writing efficient code. Someone considering a career as an Embedded Systems Engineer may find this course to be extremely valuable.
Machine Learning Engineer
A machine learning engineer develops and deploys machine learning models. A solid understanding of algorithms and data structures is helpful for optimizing model performance and scalability. This course helps build a foundation by teaching fundamental data structures like stacks and queues, and introducing dynamic programming. Mastering these concepts facilitates the development of efficient data processing pipelines and the implementation of complex machine learning algorithms. The course's emphasis on practical problem-solving may be useful to those who wish to become machine learning engineers.
Technical Lead
A technical lead guides a team of developers, making technical decisions and ensuring the quality of the code. While this role often requires significant experience, a deep understanding of algorithms and data structures can help a technical lead evaluate the efficiency of different solutions and mentor junior developers. This course helps build a foundation in these areas, covering essential topics like dynamic programming, binary search, and complexity analysis. The instructor's approach of teaching with illustration and examples may be useful when leading other developers.
Quantitative Analyst
A quantitative analyst, often working in the finance industry, develops and implements mathematical models for pricing securities, managing risk, and identifying trading opportunities. This role requires a strong background in algorithms and data structures to efficiently process financial data and optimize model performance. This course introduces foundational concepts like dynamic programming and complexity analysis, which are relevant for building and analyzing quantitative models. Someone considering a career as a Quantitative Analyst may find the material on algorithm efficiency particularly beneficial.
Data Scientist
Data scientists analyze large datasets to extract meaningful insights and build predictive models. A key aspect of this role is efficiently processing and manipulating data, which requires a solid understanding of algorithms and data structures. This course may be useful as it provides exposure to fundamental data structures like stacks and queues, and introduces dynamic programming. Mastering these concepts facilitates the development of efficient data processing pipelines and the implementation of complex machine learning algorithms. The course's emphasis on practical problem-solving may be useful to those who wish to become data scientists.
Firmware Engineer
Firmware engineers develop low-level software that controls hardware devices. Because these systems often have limited resources, firmware engineers need expertise in efficient coding practices and data structures. This course may be useful, as understanding stacks and queues may allow one to store data effectively. Embedded systems often have tight timing constraints, and the material on complexity analysis may be useful. Someone wishing to become a firmware engineer may find this course helpful.
Robotics Engineer
A robotics engineer designs, builds, and programs robots for various applications. This requires a strong understanding of algorithms and data structures for robot control, path planning, and sensor data processing. The course's content on algorithms and data structures may be useful to control the movements of the robot effectively. The focus on visual examples in the course may lead to the application of data structure to physical problems, which may be useful to robotics engineers. Someone wishing to become a robotics engineer may find this course helpful.
Systems Architect
Systems architects design and oversee the implementation of complex software systems. Although this role often requires a master's degree, understanding the performance implications of different algorithms and data structures is essential for making informed decisions about system design. This course helps build a foundation in understanding algorithm complexity and the trade-offs associated with different data structures. The 'aha, I got it now' sensation from understanding algorithm complexity might be useful to understanding the work that systems architects do.
Database Administrator
A database administrator is responsible for maintaining and optimizing databases. A deep understanding of data structures is helpful to ensure efficient storage and retrieval of data. This course may be useful, as it helps build a foundation in understanding how the algorithms used in databases work, even down to the implementation details. Someone wishing to become a database administrator may find the course helpful.

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 Introduction to Algorithms and Data structures in C++.
Popular resource for preparing for coding interviews. It covers a wide range of data structures and algorithms, along with common interview questions and solutions. Given the course's focus on problem-solving, this book can be a valuable tool for practicing and improving coding skills. It is particularly useful for students preparing for technical interviews.
Commonly known as CLRS, this book comprehensive textbook on algorithms. It covers a wide range of algorithms and data structures, including those covered in the course, with rigorous analysis and clear explanations. While it's a more theoretical approach, it provides a deep understanding of the underlying principles. is often used as a textbook in university-level algorithms courses.

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