**500+ Data Structures and Algorithms practice problems**

#### Array:

- Find pair with given sum in the array
- Check if subarray with 0 sum is exists or not
- Print all sub-arrays with 0 sum
- Sort binary array in linear time
- Find a duplicate element in a limited range array
- Find largest sub-array formed by consecutive integers
- Find maximum length sub-array having given sum
- Find maximum length sub-array having equal number of 0’s and 1’s
- Sort an array containing 0’s, 1’s and 2’s (Dutch national flag problem)
- Inplace merge two sorted arrays
- Merge two arrays by satisfying given constraints
- Find index of 0 to replaced to get maximum length sequence of continuous ones
- Find maximum product of two integers in an array
- Shuffle a given array of elements (Fisher–Yates shuffle)
- Rearrange the array with alternate high and low elements
- Find equilibrium index of an array
- Find majority element in an array (Boyer–Moore majority vote algorithm)
- Move all zeros present in the array to the end
- Replace each element of array with product of every other element without using / operator
- Find Longest Bitonic Subarray in an array
- Find maximum difference between two elements in the array by satisfying given constraints
- Maximum subarray problem (Kadane’s algorithm)
- Print continuous subarray with maximum sum
- Maximum Sum Circular Subarray
- Find all distinct combinations of given length
- Find all distinct combinations of given length with repetition allowed
- Find maximum sequence of continuous 1’s formed by replacing at-most k zeroes by ones
- Find minimum sum subarray of given size k
- Find subarray having given sum in given array of integers
- Find the length of smallest subarray whose sum of elements is greater than the given number
- Find largest number possible from set of given numbers
- Find the smallest window in array sorting which will make the entire array sorted
- Find maximum sum path involving elements of given arrays
- Maximum profit earned by buying and selling shares any number of times
- Trapping Rain Water within given set of bars
- Longest Increasing Subsequence
- Longest Decreasing Subsequence Problem
- Find maximum product subarray in a given array
- Find maximum sum of subsequence with no adjacent elements
- Find minimum platforms needed in the station so to avoid any delay in arrival of any train
- Decode the array constructed from another array
- Sort an array using one swap
- Find Triplet with given sum in an array
- Length of longest continuous sequence with same sum in given binary arrays
- Rearrange array such that A[A[i]] is set to i for every element A[i]
- Reverse every consecutive m elements of the given subarray
- Maximum Product Subset Problem
- Find pairs with given difference k in the array
- Find pairs with given difference k in the array | Constant space solution
- 4 sum problem | Quadruplets with given sum
- Print all quadruplets with given sum | 4-sum problem extended
- Find odd occurring element in an array in single traversal
- Find two odd occurring element in an array without using any extra space
- Quickselect Algorithm
- Print all Triplets that forms Arithmetic Progression
- Print all triplets that forms Geometric Progression
- Print all combination of numbers from 1 to n having sum n
- Replace each element of the array by its corresponding rank in the array
- Print all Triplets in an array with sum less than or equal to given number
- Group elements of an array based on their first occurrence
- Find minimum difference between index of two given elements present in the array
- Find maximum absolute difference between sum of two non-overlapping sub-arrays
- Find all Symmetric Pairs in an Array of Pairs
- Partition an array into two sub-arrays with the same sum
- Find count of distinct elements in every sub-array of size k
- Find two numbers with maximum sum formed by array digits
- Print all sub-arrays of an array having distinct elements
- Find a Triplet having Maximum Product in an Array
- Find ways to calculate a target from elements of specified array
- Find Minimum Index of Repeating Element in an Array
- Generate Random Input from an Array according to given Probabilities
- Find pair in an array having minimum absolute sum
- Find Index of Maximum Occurring Element with Equal Probability
- Check if an Array is Formed by Consecutive Integers
- Find two non-overlapping pairs having same sum in an array
- Find Minimum Product among all Combinations of Triplets in an Array
- Replace every element of an array with the least greater element on its right
- Find all odd occurring elements in an array having limited range of elements
- Add elements of two arrays into a new array
- Count the distinct absolute values in the sorted array
- Print all combinations of positive integers in increasing order that sum to a given number
- Find all distinct combinations of given length — Part 2
- Find subarrays with given sum in an array
- Find the surpasser count for each element of an array
- Find maximum length sequence of continuous ones (Using Sliding Window)
- Find maximum length sequence of continuous ones
- Merging Overlapping Intervals
- Activity Selection Problem
- Job Sequencing Problem with Deadlines
- Introduction to Priority Queues using Binary Heaps
- Min Heap and Max Heap Implementation in C++
- Min Heap and Max Heap Implementation in Java
- Heap Sort (Out-of-place and In-place implementation in C++ and C)
- Check if given array represents min heap or not
- Convert Max Heap to Min Heap in linear time
- Find K’th largest element in an array
- Sort a K-Sorted Array
- Merge M sorted lists of variable length
- Find K’th smallest element in an array
- Find smallest range with at-least one element from each of the given lists
- Merge M sorted lists each containing N elements
- Insertion sort | Iterative & Recursive
- Selection sort | Iterative & Recursive
- Bubble sort | Iterative & Recursive
- Merge Sort
- Quicksort
- Iterative Implementation of Quicksort
- Hybrid QuickSort
- Quicksort using Dutch National Flag Algorithm
- Quick Sort using Hoare’s Partitioning scheme
- External merge sort
- Custom Sort | Sort elements by their frequency and Index
- Custom Sort | Sort elements of the array by order of elements defined by the second array
- Inversion Count of an array
- Segregate positive and negative integers in linear time
- Binary Search
- Ternary Search vs Binary search
- Interpolation search
- Exponential search
- Find number of rotations in a circularly sorted array
- Search an element in a circular sorted array
- Find first or last occurrence of a given number in a sorted array
- Count occurrences of a number in a sorted array with duplicates
- Find smallest missing element from a sorted array
- Find Floor and Ceil of a number in a sorted array
- Search in a nearly sorted array in O(logn) time
- Find number of 1’s in a sorted binary array
- Find the peak element in an array
- Maximum Sum Subarray using Divide & Conquer
- Find Minimum and Maximum element in an array using minimum comparisons
- Matrix Chain Multiplication
- 0–1 Knapsack problem
- Maximize value of the expression
- Partition problem
- Subset sum problem
- Minimum Sum Partition problem
- Rod Cutting
- Coin change-making problem (unlimited supply of coins)
- Coin Change Problem (Total number of ways to get the denomination of coins)
- Longest alternating subsequence
- Combinations of words formed by replacing given numbers with corresponding alphabets
- Decode the given sequence to construct minimum number without repeated digits
- All combinations of elements satisfying given constraints
- Find Missing Term in a Sequence in log(n) time
- Print all distinct Subsets of a given Set
- Find Floor and Ceil of a number in a sorted array (Recursive solution)
- Set both elements of a binary array to 0 in single line
- K-Partition Problem | Printing all Partitions
- 3 Partition Problem
- 3-partition problem extended | Print all partitions
- Iterative Merge Sort Algorithm (Bottom-up Merge Sort)
- Find two duplicate elements in an limited range array (using XOR)
- Find missing number and duplicate elements in an array
- Find Minimum and Maximum element in an array by doing minimum comparisons
- Find Frequency of each element in a sorted array containing duplicates
- Difference between Subarray, Subsequence and Subset

#### Backtracking:

- Print all possible solutions to N Queens problem
- Print all Possible Knight’s Tours in a chessboard
- Find Shortest Path in Maze
- Find Longest Possible Route in a Matrix
- Find path from source to destination in a matrix that satisfies given constraints
- Find total number of unique paths in a maze from source to destination
- Print All Hamiltonian Path present in a graph
- Print all k-colorable configurations of the graph (Vertex coloring of graph)
- Find all Permutations of a given string
- All combinations of elements satisfying given constraints
- Find all binary strings that can be formed from given wildcard pattern
- K-Partition Problem | Printing all Partitions
- Magnet Puzzle
- Find ways to calculate a target from elements of specified array
- Find minimum number possible by doing at-most K swaps
- Determine if a pattern matches with a string or not

#### Binary:

- Bit Hacks — Part 1 (Basic)
- Bit Hacks — Part 2 (Playing with k’th bit)
- Bit Hacks — Part 3 (Playing with rightmost set bit of a number)
- Bit Hacks — Part 4 (Playing with letters of English alphabet)
- Bit Hacks — Part 5 (Find absolute value of an integer without branching)
- Bit Hacks — Part 6 (Random Problems)
- Brian Kernighan’s Algorithm to count set bits in an integer
- Compute parity of a number using lookup table
- Count set bits using lookup table
- Find the minimum or maximum of two integers without using branching
- Multiply 16-bit integers using 8-bit multiplier
- Round up to the next highest power of 2
- Round up to the previous power of 2
- Swap individual bits at given position in an integer
- Check if given number is power of 4 or not
- Reverse Bits of a given Integer
- Find odd occurring element in an array in single traversal
- Find two odd occurring element in an array without using any extra space
- Swap two bits at given position in an integer
- Add binary representation of two integers
- Swap Adjacent Bits of a Number
- Print all distinct Subsets of a given Set
- Perform Division of two numbers without using division operator (/)
- Check if adjacent bits are set in binary representation of a given number
- Conditionally negate a value without branching
- Find two duplicate elements in an limited range array (using XOR)
- Find missing number and duplicate elements in an array
- Check if given number is power of 8 or not
- Circular shift on binary representation of an integer by k positions
- Solve given set of problems without using multiplication or division operators
- Reverse Bits of an integer using lookup table
- Generate binary numbers between 1 to N
- Efficiently implement power function | Recursive and Iterative
- Find square of a number without using multiplication and division operator | 3 methods
- Generate power set of a given set
- Huffman Coding
- Find all odd occurring elements in an array having limited range of elements

#### Binary Tree:

- Check if two given binary trees are identical or not | Iterative & Recursive
- Calculate height of a binary tree | Iterative & Recursive
- Delete given Binary Tree | Iterative & Recursive
- Inorder Tree Traversal | Iterative & Recursive
- Preorder Tree Traversal | Iterative & Recursive
- Postorder Tree Traversal | Iterative & Recursive
- Level Order Traversal of Binary Tree
- Spiral Order Traversal of Binary Tree
- Reverse Level Order Traversal of Binary Tree
- Print all nodes of a given binary tree in specific order
- Print left view of binary tree
- Print Bottom View of Binary Tree
- Print Top View of Binary Tree
- Find next node in same level for given node in a binary tree
- Check if given binary tree is complete binary tree or not
- Determine if given two nodes are cousins of each other
- Print cousins of given node in a binary tree
- In-place convert given binary tree to its sum tree
- Check if given binary tree is a sum tree or not
- Combinations of words formed by replacing given numbers with corresponding alphabets
- Determine if given binary tree is a subtree of another binary tree or not
- Find diameter of a binary tree
- Check if given binary Tree has symmetric structure or not
- Convert binary tree to its mirror
- Check if binary tree can be converted to another by doing any no. of swaps of left & right child
- Find Lowest Common Ancestor (LCA) of two nodes in a binary tree
- Print all paths from root to leaf nodes in given binary tree
- Find ancestors of given node in a Binary Tree
- Find the distance between given pairs of nodes in a binary tree
- Find Vertical Sum in a given Binary Tree
- Print nodes in vertical order of a given Binary Tree (Vertical Traversal)
- Find the diagonal sum of given binary tree
- Print Diagonal Traversal of Binary Tree
- Print corner nodes of every level in binary tree
- In-place convert convert given Binary Tree to Doubly Linked List
- Sink nodes containing zero to the bottom of the binary tree
- Convert given binary tree to full tree by removing half nodes
- Truncate given binary tree to remove nodes which lie on a path having sum less than K
- Find maximum sum root-to-leaf path in a binary tree
- Check if given binary tree is height balanced or not
- Convert normal binary tree to Left-child right-sibling binary tree
- Determine if given Binary Tree is a BST or not
- Convert a Binary Tree to BST by maintaining its original structure
- Invert given Binary Tree | Recursive and Iterative solution
- Print Right View of a Binary Tree
- Print leaf to root path for every leaf node in a binary tree
- Find maximum width of given binary tree
- Build Binary Tree from given Parent array
- C++ Program to Print Binary Tree Structure
- Find all nodes at given distance from leaf nodes in a binary tree
- Count all subtrees having same value of nodes in a binary tree
- Find Maximum Difference Between a Node and its Descendants in a Binary Tree
- Construct a Binary Tree from Ancestor Matrix
- Calculate height of a binary tree with leaf nodes forming a circular doubly linked list

#### BST:

- Insertion in BST
- Search given key in BST
- Deletion from BST
- Construct balanced BST from given keys
- Determine if given Binary Tree is a BST or not
- Check if given keys represents same BSTs or not without building the BST
- Find inorder predecessor for given key in a BST
- Find Lowest Common Ancestor (LCA) of two nodes in a Binary Search Tree
- Find K’th smallest and K’th largest element in BST
- Floor and Ceil in a Binary Search Tree
- Find optimal cost to construct binary search tree
- Convert a Binary Tree to BST by maintaining its original structure
- Remove nodes from BST that have keys outside the valid range
- Find a pair with given sum in a BST
- Find inorder successor for given key in a BST
- Replace every element of an array with the least greater element on its right

#### Divide & Conquer:

- Binary Search
- Find number of rotations in a circularly sorted array
- Search an element in a circular sorted array
- Find first or last occurrence of a given number in a sorted array
- Count occurrences of a number in a sorted array with duplicates
- Find smallest missing element from a sorted array
- Find Floor and Ceil of a number in a sorted array
- Search in a nearly sorted array in O(logn) time
- Find number of 1’s in a sorted binary array
- Find the peak element in an array
- Maximum Sum Subarray using Divide & Conquer
- Find Minimum and Maximum element in an array using minimum comparisons
- Efficiently implement power function | Recursive and Iterative
- Find Missing Term in a Sequence in log(n) time
- Division of Two Numbers using Binary Search Algorithm
- Find Floor and Ceil of a number in a sorted array (Recursive solution)
- Find Minimum and Maximum element in an array by doing minimum comparisons
- Find Frequency of each element in a sorted array containing duplicates
- Ternary Search vs Binary search
- Exponential search
- Interpolation search
- Merge Sort Algorithm
- Iterative Merge Sort Algorithm (Bottom-up Merge Sort)
- Merge Sort Algorithm for Singly Linked List
- Inversion Count of an array
- Quicksort Algorithm
- Iterative Implementation of Quicksort
- Hybrid QuickSort
- Quicksort using Dutch National Flag Algorithm
- Quick Sort using Hoare’s Partitioning scheme

#### Dynamic Programming:

- Introduction to Dynamic Programming
- Longest Common Subsequence | Introduction & LCS Length
- Longest Common Subsequence | Space optimized version
- Longest Common Subsequence of K-sequences
- Longest Common Subsequence | Finding all LCS
- Longest Common Substring problem
- Longest Palindromic Subsequence using Dynamic Programming
- Longest Repeated Subsequence problem
- Implement Diff Utility
- Shortest Common Supersequence | Introduction & SCS Length
- Shortest Common Supersequence | Finding all SCS
- Shortest Common Supersequence | Using LCS
- Longest Increasing Subsequence using Dynamic Programming
- Longest Bitonic Subsequence
- Increasing Subsequence with Maximum Sum
- The Levenshtein distance (Edit distance) problem
- Find size of largest square sub-matrix of 1’s present in given binary matrix
- Matrix Chain Multiplication
- Find the minimum cost to reach last cell of the matrix from its first cell
- Find longest sequence formed by adjacent numbers in the matrix
- Count number of paths in a matrix with given cost to reach destination cell
- 0–1 Knapsack problem
- Maximize value of the expression
- Partition problem
- Subset sum problem
- Minimum Sum Partition problem
- Find all N-digit binary strings without any consecutive 1’s
- Rod Cutting
- Maximum Product Rod Cutting
- Coin change-making problem (unlimited supply of coins)
- Coin Change Problem — Find total number of ways to get the denomination of coins
- Total possible solutions to linear equation of k variables
- Longest alternating subsequence
- Count number of times a pattern appears in given string as a subsequence
- Collect maximum points in a matrix by satisfying given constraints
- Count total possible combinations of N-digit numbers in a mobile keypad
- Find optimal cost to construct binary search tree
- Word Break Problem
- Word Break Problem | Using Trie Data Structure
- Determine Minimal Adjustment Cost of an Array
- Check if a string is K-Palindrome or not
- Wildcard Pattern Matching
- Find probability that a person is alive after taking N steps on the island
- Calculate sum of all elements in a sub-matrix in constant time
- Find maximum sum K x K sub-matrix in a given M x N matrix
- Find maximum sum submatrix present in a given matrix
- Find maximum sum of subsequence with no adjacent elements
- Maximum subarray problem (Kadane’s algorithm)
- Single-Source Shortest Paths — Bellman Ford Algorithm
- All-Pairs Shortest Paths — Floyd Warshall Algorithm
- Longest Decreasing Subsequence Problem
- Pots of Gold Game using Dynamic Programming
- Find minimum cuts needed for palindromic partition of a string
- Maximum Length Snake Sequence
- 3 Partition Problem
- Calculate size of the largest plus of 1’s in binary matrix
- Check if given string is interleaving of two other given strings
- Longest Increasing Subsequence using LCS
- Determine negative-weight cycle in a graph

#### Graphs:

- Terminology and Representations of Graphs
- Graph Implementation using STL
- Graph Implementation in C++ without using STL
- Implement Graph Data Structure in C
- Graph Implementation in Java using Collections
- Breadth First Search (BFS) | Iterative & Recursive Implementation
- Depth First Search (DFS) | Iterative & Recursive Implementation
- Arrival and Departure Time of Vertices in DFS
- Types of edges involved in DFS and relation between them
- Bipartite Graph
- Determine if a given graph is Bipartite Graph using DFS
- Minimum number of throws required to win Snake and Ladder game
- Topological Sorting in a DAG
- Kahn’s Topological Sort Algorithm
- Transitive Closure of a Graph
- Check if an undirected graph contains cycle or not
- Total paths in given digraph from given source to destination having exactly m edges
- Determine if an undirected graph is a Tree (Acyclic Connected Graph)
- 2-Edge Connectivity in the graph
- 2-Vertex Connectivity in the graph
- Check if given digraph is a DAG (Directed Acyclic Graph) or not
- Disjoint-Set Data Structure (Union-Find Algorithm)
- Chess Knight Problem — Find Shortest path from source to destination
- Check if given Graph is Strongly Connected or not
- Check if given Graph is Strongly Connected or not using one DFS Traversal
- Union-Find Algorithm for Cycle Detection in undirected graph
- Kruskal’s Algorithm for finding Minimum Spanning Tree
- Single-Source Shortest Paths — Dijkstra’s Algorithm
- Single-Source Shortest Paths — Bellman Ford Algorithm
- All-Pairs Shortest Paths — Floyd Warshall Algorithm
- Find Cost of Shortest Path in DAG using one pass of Bellman-Ford
- Least Cost Path in Weighted Digraph using BFS
- Find maximum cost path in graph from given source to destination
- Determine negative-weight cycle in a graph
- Print all k-colorable configurations of the graph (Vertex coloring of graph)
- Print All Hamiltonian Path present in a graph
- Greedy coloring of graph

#### Heap:

- Introduction to Priority Queues using Binary Heaps
- Min Heap and Max Heap Implementation in C++
- Min Heap and Max Heap Implementation in Java
- Heap Sort
- Check if given array represents min heap or not
- Convert Max Heap to Min Heap in linear time
- Find K’th largest element in an array
- Sort a K-Sorted Array
- Merge M sorted lists of variable length
- Find K’th smallest element in an array
- Find smallest range with at-least one element from each of the given lists
- Merge M sorted lists each containing N elements
- External merge sort
- Huffman Coding
- Find first k maximum occurring words in given set of strings
- Find first k non-repeating characters in a string in single traversal

#### Linked List:

- Introduction to Linked Lists
- Linked List Implementation | Part 1
- Linked List Implementation | Part 2
- Static Linked List in C
- Clone given Linked List
- Delete Linked List
- Pop operation in linked list
- Insert given node into the correct sorted position in the given sorted linked list
- Given a linked list, change it to be in sorted order
- Split the nodes of the given linked list into front and back halves
- Remove duplicates from a sorted linked list
- Move front node of the given list to the front of the another list
- Move even nodes to the end of the list in reverse order
- Split given linked list into two lists where each list containing alternating elements from it
- Construct a linked list by merging alternate nodes of two given lists
- Merge given sorted linked lists into one
- Merge Sort Algorithm for Singly Linked List
- Intersection of two given sorted linked lists
- Reverse linked list | Part 1 (Iterative Solution)
- Reverse linked list | Part 2 (Recursive Solution)
- Reverse every group of k nodes in given linked list
- Find K’th node from the end in a linked list
- Merge alternate nodes of two linked lists into the first list
- Merge two sorted linked lists from their end
- Delete every N nodes in a linked list after skipping M nodes
- Rearrange linked list in specific manner in linear time
- Check if linked list is palindrome or not
- Move last node to front in a given Linked List
- Rearrange the linked list in specific manner
- Detect Cycle in a linked list (Floyd’s Cycle Detection Algorithm)
- Sort linked list containing 0’s, 1’s and 2’s
- Stack Implementation using Linked List
- Queue Implementation using Linked List
- Remove duplicates from a linked list
- Rearrange the linked list so that it has alternating high, low values
- Rearrange a Linked List by Separating Odd Nodes from the Even Ones
- Calculate height of a binary tree with leaf nodes forming a circular doubly linked list

#### Matrix:

- Print Matrix in Spiral Order
- Create Spiral Matrix from given array
- Shift all matrix elements by 1 in Spiral Order
- Find Shortest path from source to destination in a matrix that satisfies given constraints
- Change all elements of row i and column j in a matrix to 0 if cell (i, j) has value 0
- Print diagonal elements of the matrix having positive slope
- Find all paths from first cell to last cell of a matrix
- Replace all occurrences of 0 that are not surrounded by 1 in a binary matrix
- In-place rotate the matrix by 90 degrees in clock-wise direction
- Count negative elements present in sorted matrix in linear time
- Report all occurrences of an element in row wise and column wise sorted matrix in linear time
- Calculate sum of all elements in a sub-matrix in constant time
- Find maximum sum K x K sub-matrix in a given M x N matrix
- Find maximum sum submatrix present in a given matrix
- Find probability that a person is alive after taking N steps on the island
- Count the number of islands
- Flood fill Algorithm
- Find shortest safe route in a field with sensors present
- Find all occurrences of given string in a character matrix
- Shortest path in a Maze | Lee algorithm
- Check if given matrix is Toeplitz matrix or not
- In-place rotate the matrix by 180 degrees
- Fill Binary Matrix with Alternating Rectangles of 0 and 1
- Find all common elements present in every row of given matrix
- Construct a Binary Tree from Ancestor Matrix
- Find common elements present in all rows of a matrix
- Travelling Salesman Problem using Branch and Bound
- Collect maximum points in a matrix by satisfying given constraints
- Count number of paths in a matrix with given cost to reach destination cell
- Find longest sequence formed by adjacent numbers in the matrix
- Find the minimum cost to reach last cell of the matrix from its first cell
- Matrix Chain Multiplication
- Find size of largest square sub-matrix of 1’s present in given binary matrix
- Chess Knight Problem — Find Shortest path from source to destination
- Find Duplicate rows in a binary matrix
- Print all possible solutions to N Queens problem
- Print all Possible Knight’s Tours in a chessboard
- Find Shortest Path in Maze
- Find Longest Possible Route in a Matrix
- Calculate size of the largest plus of 1’s in binary matrix
- Find the maximum value of M[c][d] — M[a][b] over all choices of indexes
- Find shortest distance of every cell from landmine in a Maze
- Find shortest route in a device to construct the given string

#### Queue:

- Queue Implementation
- Queue Implementation using Linked List
- Chess Knight Problem — Find Shortest path from source to destination
- Shortest path in a Maze | Lee algorithm
- Find shortest safe route in a field with sensors present
- Flood fill Algorithm
- Count the number of islands
- Find Shortest path from source to destination in a matrix that satisfies given constraints
- Generate binary numbers between 1 to N
- Calculate height of a binary tree | Iterative & Recursive
- Delete given Binary Tree | Iterative & Recursive
- Level Order Traversal of Binary Tree
- Spiral Order Traversal of Binary Tree
- Reverse Level Order Traversal of Binary Tree
- Print all nodes of a given binary tree in specific order
- Print left view of binary tree
- Find next node in same level for given node in a binary tree
- Check if given binary tree is complete binary tree or not
- Print Diagonal Traversal of Binary Tree
- Print corner nodes of every level in binary tree
- Breadth First Search (BFS) | Iterative & Recursive Implementation
- Minimum number of throws required to win Snake and Ladder game
- Check if an undirected graph contains cycle or not
- Invert given Binary Tree | Recursive and Iterative solution
- Find maximum cost path in graph from given source to destination
- Find shortest distance of every cell from landmine in a Maze

#### Sorting:

- Insertion sort | Iterative & Recursive
- Selection sort | Iterative & Recursive
- Bubble sort | Iterative & Recursive
- Merge Sort Algorithm
- Iterative Merge Sort Algorithm (Bottom-up Merge Sort)
- Quicksort Algorithm
- Iterative Implementation of Quicksort
- Hybrid QuickSort
- Quicksort using Dutch National Flag Algorithm
- Quick Sort using Hoare’s Partitioning scheme
- External merge sort
- Counting Sort Algorithm
- Custom Sort | Sort elements by their frequency and Index
- Custom Sort | Sort elements of the array by order of elements defined by the second array
- Inversion Count of an array
- Segregate positive and negative integers in linear time
- Efficiently Sort an Array with many Duplicated Values
- Find the smallest window in array sorting which will make the entire array sorted
- Find largest number possible from set of given numbers
- Move all zeros present in the array to the end
- Sort binary array in linear time
- Sort linked list containing 0’s, 1’s and 2’s
- Merge Sort Algorithm for Singly Linked List
- Group anagrams together from given list of words
- Activity Selection Problem
- Lexicographic sorting of given set of keys
- Heap Sort
- Merge M sorted lists of variable length
- Merge M sorted lists each containing N elements
- Find all palindromic permutations of a string
- Find all lexicographically next permutations of a string sorted in ascending order
- Merge two sorted linked lists from their end
- Sort an array containing 0’s, 1’s and 2’s (Dutch national flag problem)
- Find pair with given sum in the array
- Inplace merge two sorted arrays
- Merge two arrays by satisfying given constraints
- Find maximum product of two integers in an array
- Find all distinct combinations of given length
- Find all distinct combinations of given length with repetition allowed
- Merging Overlapping Intervals
- Print all quadruplets with given sum | 4-sum problem extended
- 4 sum problem | Quadruplets with given sum
- Find two numbers with maximum sum formed by array digits
- Find a Triplet having Maximum Product in an Array
- Find Minimum Product among all Combinations of Triplets in an Array
- Find all distinct combinations of given length — Part 2
- Find the surpasser count for each element of an array

#### Stack:

- Stack Implementation
- Stack Implementation using Linked List
- Check if given expression is balanced expression or not
- Find duplicate parenthesis in an expression
- Evaluate given postfix expression
- Decode the given sequence to construct minimum number without repeated digits
- Inorder Tree Traversal | Iterative & Recursive
- Preorder Tree Traversal | Iterative & Recursive
- Postorder Tree Traversal | Iterative & Recursive
- Find ancestors of given node in a Binary Tree
- Check if two given binary trees are identical or not | Iterative & Recursive
- Reverse given text without reversing the individual words
- Find all binary strings that can be formed from given wildcard pattern
- Iterative Implementation of Quicksort
- Depth First Search (DFS) | Iterative & Recursive Implementation
- Invert given Binary Tree | Recursive and Iterative solution
- Print leaf to root path for every leaf node in a binary tree

#### String:

- Check if given string is a rotated palindrome or not
- Longest Palindromic Substring (Non-DP Space Optimized Solution)
- Check if repeated subsequence is present in the string or not
- Check if strings can be derived from each other by circularly rotating them
- Check if given set of moves is circular or not
- Convert given number into corresponding excel column name
- Determine if two strings are anagram or not
- Find all binary strings that can be formed from given wildcard pattern
- Find all interleavings of given strings
- Isomorphic Strings
- Find all possible palindromic substrings in a string
- Find all possible combinations of words formed from mobile keypad
- Find all possible combinations by replacing given digits with characters of the corresponding list
- Find all words from given list that follows same order of characters as given pattern
- Find first k non-repeating characters in a string in single traversal
- Group anagrams together from given list of words
- Introduction to Pattern Matching
- Inplace remove all occurrences of ‘AB’ and ‘C’ from the string
- Longest even length palidromic sum substring
- Print string in zig-zag form in k rows
- Reverse given text without reversing the individual words
- Run Length Encoding (RLE) data compression algorithm
- Validate an IP address
- Find the longest substring of given string containing k distinct characters
- Find all palindromic permutations of a string
- Find all substrings of a string that are permutation of a given string
- Find the longest substring of given string containing all distinct characters
- Find all Permutations of a given string
- Iterative Approach to find Permutations of a String in C++ and Java
- Generate all Permutations of a String in Java | Recursive & Iterative
- Find all lexicographically next permutations of a string sorted in ascending order
- Find Lexicographically minimal string rotation
- Find all strings of given length containing balanced parentheses
- Find all N-digit strictly increasing numbers (Bottom-Up and Top-Down Approach)
- Find all N-digit binary numbers having more 1’s than 0’s for any prefix
- Find all N-digit numbers with given sum of digits
- Find all N-digit binary numbers with k-bits set where k ranges from 1 to N
- Generate binary numbers between 1 to N
- Find all combinations of non-overlapping substrings of a string
- Check if given sentence is syntactically correct or not
- Calculate rank of given string among all its lexicographically sorted permutations
- Find all Lexicographic Permutations of a String
- Find all N-digit binary numbers with equal sum of bits in its two halves
- Check if given string is interleaving of two other given strings
- Difference between Subarray, Subsequence and Subset
- std::next_permutation | Overview & Implementation in C++
- std::prev_permutation | Overview & Implementation in C++
- Implementation of KMP Algorithm in C, C++ and Java
- Reverse String without using Recursion
- Reverse given string using Recursion
- Reverse a String in Java in 10 different ways
- Determine if a given string is palindrome or not
- In-place remove all adjacent duplicates from the given string
- Find the minimum number of inversions needed to make the given expression balanced
- Replace all non-overlapping occurrences of the pattern
- Construct the longest palindrome by shuffling or deleting characters from a string
- Determine if characters of a String follows a specified order or not
- Print all combinations of phrases that can be formed by picking words from each of the given lists
- Remove all extra spaces from a string
- Break a string into all possible combinations of non-overlapping substrings
- Remove adjacent duplicate characters from a string
- Combinations of words formed by replacing given numbers with corresponding alphabets
- Word Break Problem
- Wildcard Pattern Matching
- Count number of times a pattern appears in given string as a subsequence
- The Levenshtein distance (Edit distance) problem
- Longest Common Subsequence | Introduction & LCS Length
- Longest Common Subsequence | Space optimized version
- Longest Common Subsequence of K-sequences
- Longest Common Subsequence | Finding all LCS
- Longest Repeated Subsequence problem
- Longest Palindromic Subsequence using Dynamic Programming
- Longest Common Substring problem
- Shortest Common Supersequence | Introduction & SCS Length
- Shortest Common Supersequence | Finding all SCS
- Shortest Common Supersequence | Using LCS
- Implement Diff Utility
- Word Break Problem | Using Trie Data Structure
- Find minimum cuts needed for palindromic partition of a string
- Check if a string is K-Palindrome or not
- Find shortest route in a device to construct the given string
- Find minimum number possible by doing at-most K swaps
- Determine if a pattern matches with a string or not

#### Trie:

- Trie Implementation | Insert, Search and Delete
- Memory efficient Trie Implementation using Map | Insert, Search and Delete
- C++ Implementation of Trie Data Structure
- Longest Common Prefix in given set of strings (using Trie)
- Lexicographic sorting of given set of keys
- Find maximum occurring word in given set of strings
- Find first k maximum occurring words in given set of strings
- Find Duplicate rows in a binary matrix
- Word Break Problem | Using Trie Data Structure

#### Greedy:

- Activity Selection Problem
- Huffman Coding
- Shortest Superstring Problem
- Job Sequencing Problem with Deadlines
- Greedy coloring of graph
- Kruskal’s Algorithm for finding Minimum Spanning Tree
- Single-Source Shortest Paths — Dijkstra’s Algorithm

#### Puzzles:

- Clock angle problem — Find angle between hour and minute hand
- Add two numbers without using addition operator | 4 methods
- Generate power set of a given set
- Implement power function without using multiplication and division operators
- Print all numbers between 1 to N without using semicolon
- Swap two numbers without using third variable | 5 methods
- Determine the if condition to print specific output
- Find maximum, minimum of three numbers without using conditional statement and ternary operator | 4 methods
- Find numbers represented as sum of two cubes for two different pairs
- Print “Hello World” with empty main() function | 3 methods
- Tower of Hanoi Problem
- Print all numbers between 1 to N without using any loop | 4 methods
- Print a semicolon without using semicolon anywhere in the program
- Multiply two numbers without using multiplication operator or loops
- Find square of a number without using multiplication and division operator | 3 methods
- Find if a number is even or odd without using any conditional statement
- Set both elements of a binary array to 0 in single line
- Find minimum number without using conditional statement or ternary operator
- Perform Division of two numbers without using division operator (/)
- Generate 0 and 1 with 75% and 25% Probability
- Generate Desired Random Numbers With Equal Probability
- Return 0, 1 and 2 with equal Probability using the specified function
- Generate Fair Results from a Biased Coin
- Generate numbers from 1 to 7 with equal probability using specified function
- Implement Ternary Operator Without Using Conditional Expressions
- Determine if two integers are equal without using comparison and arithmetic operators
- Return 0 and 1 with equal Probability using the specified function
- Generate Random Input from an Array according to given Probabilities
- Generate Fair Results from a Biased Coin
- Magnet Puzzle