The repository is organized into the following sequence:
-
Linked Lists (18 Problems)
- Singly Linked List
- Insertion at the front
- Insertion at the end
- Insertion at k-th position
- Deletion in a linked list
- Circular Linked List
- Doubly Linked List
-
Stacks and Queues (27 Problems)
- Stack Introduction
- Push, Pop, Peek, isEmpty, isFull functions
- Implementing a Stack
- Stacks using inbuilt libraries
- Valid Parenthesis Problem
- Dealing with Reverse Polish Notation
- Finding Next Greater Element
- Largest Rectangle in a Histogram
- Queue Introduction - Enqueue / Dequeue
- Queue Implementation
- To-do List using a Queue
-
Time Complexity (39 Problems)
- Fundamentals of Time Complexity
- Applying Time Complexity to DSA Problems
- Log and Square Root Time Complexity
- Practice Problems
-
Searching and Sorting Algorithms (35 Problems)
- Introduction to Linear Search
- Practice Linear Search
- Introduction to Sorting
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Counting Sort
- Radix Sort
-
Greedy Algorithms (22 Problems)
- Introduction to Greedy Algorithms
- Basics of Greedy and Proofs
- Chopsticks Problem
- Evacuate to Moon Problem
- Snakes and Mongoose Problem
- Maximum Score Problem
- Maximize Disjoint Pair Sum
-
Two Pointers and Sliding Window Technique
- Two Pointers Technique
- Sliding Window Technique
- Remove duplicates from a sorted array
- Find if absolute difference of two elements equals B
- Find common elements in two arrays
- Minimum Similar Substring
- Palindrome by Splitting
- More practice problems
-
Prefix Sum Problems
- Creating Prefix Array
- Optimizations using Prefix Sum
- Suffix Arrays
- Good Subarrays problem
- Counting Pretty Numbers problem
- Mystical Numbers problem
- Rectangular Queries problem
- More Practice Problems
-
Binary Search
- What is Binary Search?
- Visualization of Binary Search
- Time Complexity Analysis of Binary Search
- Using Inbuilt libraries
- Solve Average Flex
- Solve The Wave
- Implicit Binary Search
- Binary Search Templates
- Solve Coins and Triangle
-
Recursion
- Introduction to Recursion
- Base Condition
- Solve Sum of N Numbers using Recursion
- Factorial using Recursion
- Fibonacci series
- Linear search and patterns using Recursion
- Palindrome using Recursion
- All Possible Subsets
- Backtracking - Unique Combinations Sum
- Backtracking - Find Unique Permutations
-
2D Array / Matrices
- Representing a Matrix
- Matrix traversal
- Matrix multiplication
- Matrix rotations
- Finding path with minimum sum
- Search in Matrix
- Median in Matrix
-
Trees and Binary Trees
- Introduction to Trees
- Nodes, Edges, Root, Leaves
- Tree property
- Degree of a Node
- Depth and Height of a Tree
- Adjacency matrix representation
- Adjacency list representation
- Depth First Search
- Breadth First Search
- Binary Trees
- Types of Binary Trees
- PreOrder, PostOrder and InOrder traversal
- Height of a Binary Tree
- Binary Search Tree
- Search in Binary Search Tree
-
Graphs
- Introduction to Graphs
- Undirected and Directed Graphs
- Representation as Adjacency Matrix
- Representation as Adjacency List
- Graph Traversal
- Depth First Search
- Breadth First Search
- Connected Components
- Cycles in Graphs
- Directed Acyclic Graph
- Topological Sorting
-
Heaps
- Introduction to Heaps
- Max Heap and Min Heap
- Representation as an Array
- Insertion in Heap
- Deletion of root
- Time complexity of operations
- Heap Sort
- Find K-th largest number
-
Bit Manipulation
- Binary Number System
- Converting Decimal to Binary
- Bitwise Operators
- AND Operator
- OR Operator
- XOR Operator
- Solve Dull Operation
- Not Operator
- Signed and Unsigned Data Types
- Left and Right Shift
- Practice Problems
-
Dynamic Programming
- Introduction to Dynamic Programming
- Maximum Subset Sum
- Maximum Sum of a Valid Subset
- Comparing with Greedy and Brute Force
- Finding Subproblems
- Solving Subproblems
- Partitioning Problem
- Maximum Sum Subarray
- Longest Increasing Subsequence
- Sums in a Triangle
- Maximum sum path in a 2D Grid
-
Number Theory
- Prime Factorization
- Prime Factorization in Sqrt(n)
- Counting Divisors - I
- GCD and LCM
- Euclid Algorithm for GCD
- Modular Arithmetic
- Fast Exponentiation
- Modular Multiplicative Inverse
- Fermat Binomials
- Sieve of Eratosthenes
- Primality Test
- Prime Factorization Method using Sieve O (log n)
-
Combinatorics
- Introduction to Combinatorics
- Conceptual Problems
-
Disjoint Set Union
- Introduction to Disjoint Set Union
- Parent Find and Union operations
- Naive DSU implementation
- Path Compression Optimization
- Optimal Union
- Practice Problems
-
Tries
- Structure of a Trie
- Insertion in Trie
- Searching for a string in Trie
- Deleting a string in Trie
- Applications - Spell Check, Autocomplete
-
Data Structures Interview Questions
- Basic programming - 1
- Basic programming - 2
- Arrays
- Sorting
- Strings
- Linkedlist
- Stacks
- Queues
- Binary Search
- Graphs
- Trees
- Hashing
- Two pointers
- Dynamic Programming
- Bit Manipulation
- Backtracking
-
Linked Lists
- Linked List
-
Stacks and Queues
- Stack and Queue
-
Heaps
- Heap