DSA in the order it is actually learned: build each data structure yourself, then the sorts, then recursion, dynamic programming and graphs, then a bank of interview problems to prove it. Pick Python, Java, C++, Go or any of fourteen languages - nearly every course ships in all of them. Free, in your browser, with a certificate on most courses.
Overview
Syllabus
- Stack - Data Structures Series #1 — Stack, queue, binary tree, hash table and linked list, each built from scratch and then used to solve problems. The five structures behind most interview questions and most of the standard library you already use.
- Doubly Linked List - Data Structures Series #6 — Doubly linked list, heaps and priority queues, tries, graphs and the self-balancing AVL tree. The structures that separate a candidate who memorised a list from one who can pick the right tool for a problem.
- Bubble Sort — Bubble, selection, insertion, merge, quick, heap, counting and radix sort - written, compared and watched in the visualizer. Sorting is where Big-O stops being notation and becomes something you can see.
- Recursion Challenges - Master The Recursive Thinking — Recursive thinking through a bank of challenges, then dynamic programming (in Python) from memoisation to tabulation, then bit manipulation (in C++). Recursion is the idea the next two depend on, which is why it comes first.
- Breadth-First Search - Graph Algorithms — Breadth-first and depth-first search, Dijkstra, Bellman-Ford, topological sort, Kruskal and Prim - one focused course each, on the graph structure you built in step two.
- Interview Coding Challenges - Pack I — Ten interview challenge packs, the Python interview series and two coding-problem banks: unfamiliar problems, graded by test cases, solved without a tutorial. This is the step that turns the previous five into an offer.
Courses
-
In this course, you will learn about the AVL Tree data structure, build a self-balancing binary search tree from zero in your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
Master Prim's Algorithm for Minimum Spanning Trees: grow one tree from a start vertex by always adding the cheapest crossing edge. Build it in your language of choice and answer bottleneck-edge and connectivity queries, the counterpart to Kruskal.
Prerequisites:
- Knowledge of a programming language of your choice.
- Basic understanding of weighted graphs.
- Helpful: the Kruskal course (the other MST algorithm).
-
Master Kruskal's Algorithm for Minimum Spanning Trees. Build union-find, grow an MST by adding the cheapest cycle-free edge in your language of choice, and answer connectivity and bottleneck-edge queries.
Prerequisites:
- Knowledge of a programming language of your choice.
- Basic understanding of weighted graphs.
-
Master the Bellman-Ford algorithm: single-source shortest paths that work with negative edge weights, plus negative-cycle detection. Build a relaxation pass, the full algorithm in your language of choice, and answer distance and cycle queries.
Prerequisites:
- Knowledge of a programming language of your choice.
- Helpful: the Dijkstra course (shortest paths with non-negative weights).
-
Master Dijkstra's Algorithm, the greedy single-source shortest-path method for graphs with non-negative weights. Read weighted edges, build the full distance computation in your language of choice, and answer point-to-point and farthest-vertex queries.
Prerequisites:
- Knowledge of a programming language of your choice.
- Familiarity with basic graph traversal (BFS/DFS).
-
Master Breadth-First Search, the layer-by-layer graph traversal behind shortest paths. Build the neighbor lookup, write an iterative BFS with a queue in your language of choice, and use it to find shortest-path distances in unweighted graphs.
Prerequisites:
- Knowledge of a programming language of your choice.
- Basic understanding of arrays and queues.
-
Master Topological Sort, the ordering of a directed acyclic graph so every edge points forward. Compute in-degrees, build an order with Kahn's algorithm in your language of choice, detect cycles, and find the longest path in a DAG.
Prerequisites:
- Knowledge of a programming language of your choice.
- Basic understanding of directed graphs.
-
Master Depth-First Search, a fundamental way to explore a graph. Build the adjacency lookup, write an iterative DFS in your language of choice, analyze its O(V + E) complexity, and use it to count and measure connected components.
Prerequisites:
- Knowledge of a programming language of your choice.
- Basic understanding of arrays and stacks.
-
Master Counting Sort, a non-comparison algorithm that sorts non-negative integers in linear time by tallying values. Build the counting phase, write the full sort in your language of choice, analyze its O(n + k) complexity, and practice with coding challenges.
Prerequisites:
- Knowledge of a programming language of your choice.
-
Master Heap Sort, the array-based binary heap turned into a sorting algorithm. Build the sift-down step, write the full sort in your language of choice, analyze its O(n log n) time and O(1) space, and practice with coding challenges.
Prerequisites:
- Knowledge of a programming language of your choice.
-
Master Radix Sort, a non-comparison algorithm that sorts non-negative integers digit by digit. Build the stable counting-sort pass, write the full sort in your language of choice, analyze its linear-time behavior, and practice with coding challenges.
Prerequisites:
- Knowledge of a programming language of your choice.
-
Master Quick Sort, one of the fastest sorting algorithms in practice. Build the partition step, write the full recursive sort in your language of choice, analyze its complexity, and practice with coding challenges.
Prerequisites:
- Knowledge of a programming language of your choice.
-
Master Selection Sort, one of the simplest sorting algorithms. See how it works step by step, build it from scratch in your language of choice, analyze its complexity, and practice with coding challenges.
Prerequisites:
- Knowledge of a programming language of your choice.
-
Master Merge Sort, the classic divide and conquer algorithm. Build the merge step, write the full recursive sort in your language of choice, analyze its O(n log n) complexity, and practice with coding challenges.
Prerequisites:
- Knowledge of a programming language of your choice.
-
In this course, you will learn about the Graph data structure, create an undirected graph from zero in your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
In this course, you will learn about the Trie (prefix tree), create one from zero in your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
In this course, you will learn about the Heap data structure (the backbone of priority queues), create a MinHeap from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
In this course, you will learn about the Doubly Linked List data structure, create a Doubly Linked List from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
In this course, you will learn about the Hash Table data structure, create a Hash Table from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
In this course, you will learn about the Linked List data structure, create a Linked List from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
Put your programming problem solving skills to the test using the exercises with different difficulties in this course. Designed for coders with some prior knowledge of the basic syntax in any programming language. This course is an extension of the first Coding Problems
Prerequisites:
- Intermediate knowledge of programming
- Familiar with conditional statements, loops, functions and lists
- Problem-solving skills and algorithmic thinking skills
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared for your next interview, Happy Coding
Prerequisites:
- Programming language of your choice
-
In this course, you will learn about the Binary Tree data structure, create a Binary Tree from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared for your next interview, Happy Coding
Prerequisites:
- Programming language of your choice
-
Simple yet powerful algorithm. Learn how to efficiently arrange elements, understand time complexity, and enhance your sorting skills. Dive in now!
Prerequisites:
- Knowledge of a programming language of your choice.
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared for your next interview, Happy Coding
Prerequisites:
- Programming language of your choice
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared for your next interview, Happy Coding
Prerequisites:
- Programming language of your choice
-
In this course, you will learn about the Queue data structure, create a Queue from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
Master the art of solving complex problems efficiently. Boost your problem-solving skills for coding interviews with easy-to-follow lessons and hands-on challenges.
Prerequisites:
- Knowledge in Python
-
In this course, you will learn about the Stack data structure, create a Stack from zero using your preferred language, and practice coding challenges with it!
Prerequisites:
- Basic object oriented programming knowledge in a language of your choice
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared for your next interview, Happy Coding!
Prerequisites:
- Programming language of your choose
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared, did you finished the last packs? Happy Coding!
Prerequisites:
- Programming language of your choice
-
This course contains 12 interview practice questions which are the combination of both easy and medium level. This course challenge you to solve questions within a given time and to have good practice on several topics
Prerequisites:
- Basic knowledge of Python
- To be good in List, Tuple, Set, String
- Basic knowledge of Data Structure and OOPS concept
- To be good in problem solving skills and mathematics
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared, did you finished the last packs? Happy Coding!
Prerequisites:
- Programming language of your choose
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared. Good luck!
Prerequisites:
- Good knowledge in a programming language of your choice
-
In this course we will learn about bit manipulation with some exciting challenges to boost up problem solving!
Prerequisites:
- Good knowledge in C++
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared. Good luck!
Prerequisites:
- Good knowledge in a programming language of your choice
-
Are you ready for your next coding interview? Test your knowledge and skills with these challenges and be prepared. Good luck!
Prerequisites:
- Good knowledge in a programming language of your choice
-
Put your programming problem solving skills to the test using the exercises with different difficulties in this course. Designed for coders with some prior knowledge of the basic syntax in any programming language.
Prerequisites:
- Intermediate knowledge of programming
- Being comfortable with conditional statements, loops, functions and lists
- Having knowledge of problem solving and algorithmic thinking
-
Recursion is an important concept in computer science and a very powerful tool in writing algorithms. In this course, you will use recursion to solve challenges from beginner to advanced. In the end, you will ace this topic.
Prerequisites:
- Good knowledge in any programming language
-
Everything About Bubble Sort
Prerequisites:
- Fundamentals
- A computer and internet connection is required